The Imagine Compendium: Appendices ======================== INDEX ========================================== APPENDIX A: DETAIL TUTORIAL (by Steve Worley) APPENDIX B: FORMS TUTORIAL (by Steve Worley) APPENDIX C: VIDEOTAPE i) dumping to videotape ii) comments on dumping to videotape iii) more comments on dumping to videotape APPENDIX D: CENTAUR TAPE: i) review ii) second review APPENDIX E: SURFACE MASTER i) Advertisement ii) Review 1 iii) Review 2 iv) Additional Details APPENDIX F: TTDDD (an excellent shareware package). i) getting coordinates with TTDDD. ii) making threads. APPENDIX G: WAY COOL PROJECTS i) extruding picture ii) rolling sphere iii) 3-D font APPENDIX H: Credits and email addresses +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ APPENDIX A: DETAIL TUTORIAL (by Steve Worley) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ This file is a tutorial introduction to the Detail Editor. It describes the way Imagine stores objects, how Imagine interacts with you to show the objects you are building, how you can build and manipulate these objects, and make complex objects formed of many sub-objects. A later tutorial will describe the more advanced features of the Detail Editor which allows you to manipulate objects in much more complex ways, like cutting one object with another, making outlines and filling them with faces, defining objects by successive cross sections, and bending objects around tubes and spheres, and even using outlines as a lathe guide. A third tutorial will be a more general discussion of the approaches to object creation, discussing how to plan and actually build your objects as opposed to what each menu item in the Detail Editor does. This tutorial is more basic than most of my others. I realize that many people will be disappointed, but I feel it is necessary to give an introduction describing how objects are defined and how the standard controls in the all of the editors are used. New users will GREATLY appreciate a description of the goals of the Detail Editor and how objects are defined and used in Imagine before delving into a description of the suboptions of each menu item. For those of you who are looking for a more hard-core Detail tutorial, none to fear! It's my next project, and it will should blend into a nice, logical successor to this tutorial. Even those who scoff at this introduction might want to read it anyway; there are a lot of subtle points (especially about pick and select!) that are well worth learning about. This tutorial describes the Detail Editor in Imagine version 1.1. There are only minor differences (Taut and Fracture) from version 1.0. An Introduction to the Detail Editor Last Revised 6/11/91 By Steven Worley ------------------------------------------------------------------------- I. What are Imagine objects? ------------------------------------------------------------------------- When a computer program wants to draw a 3D object, it must have some way of internally representing it. Some modelers store each object as a bunch of 2 dimensional polygons- a 3D object is a formed from a whole bunch of these polygons pasted together. A cube might be defined as six 2D squares arranged in a group. Since our final picture just has to LOOK like it is solid, defining the outer surface is usually all we need to do to make it seem as if the objects ARE solid. Any object can be defined as a bunch of flat polygons. Curved surfaces like a sphere can use a lot of polygons in order to approximate the surface closely; certain computer tricks (including a very important one called Phong shading) can smooth out the surface even more. Most of the 3D objects, or models, that you've ever seen in any 3D computer graphic were defined as polygons. Sometimes advanced programs define surfaces with a mathematical equation, or by a certain type of curve, and sometimes a computer model will have certain objects it "knows" how they should look (like a mathematically defined sphere or cone) but most use polygons for definition, Imagine included. All objects in Imagine are defined as a bunch of triangles. Nothing more. It is particularly easy for a computer to decide what a triangle would look like when viewed as a 3D image. Any more complex polygon (like a square or octagon) can be broken down into a bunch of triangles pretty easily. Having only one "shape" to deal with is actually a convenience for us, as we don't have to worry about questions of what type of polygons a certain object is made of, or how to convert one type of polygon into another. The computer likes dealing only with triangles because it can optimize it's renderer, the program that actually draws the pictures, to expect and deal with just one shape simple instead of 246 different ones. Although an object is made of only triangles (called FACES) it has points and edges which define where these faces go. If you think of a simple triangle, it has 3 defining points at the corners, three edges connecting these points, and one face which actually makes up the body of the triangle. Imagine can better deal with the objects by defining these sub-parts, and it allows us to manipulate the objects much more easily. Every object has a number of defined POINTS. Imagine understands an EDGE to be a line segment that connects any two of these points. A face is defined by naming the three edges that make it up. Instead of storing nine numbers for each triangle (the X,Y,Z location of each corner) it just names the edges, which in turn name the points. This reduces the size of a description of an object considerably. It also helps in editing objects, since if you move a point, each face that it is part of will adjust itself to the include the new location of the point. The other alternative would be to have each face manually manipulated individually, which is obviously a big pain. Think of a square. Imagine would store a square as two triangles that share one edge together. The square would actually contain FIVE edges (the four sides and the diagonal) and FOUR points (one at each of the corners.) It would have two faces, or triangles. A cube is stored as twelve faces, formed by eighteen edges, which are in turn defined by eight points. This definition of objects actually gives us some extra leeway in how we define our model. Imagine doesn't require your object to be connected at all; that is, your object could be two completely separate surfaces that never touch. You might want an object to be a flying logo. The letters don't actually touch and form one solid object; they are independent from each other. Imagine doesn't care; you can call any collection of points, edges, and faces an object. Imagine also gives you tools for splitting off part of an object (like a letter) or joining two parts together. Since this is a computer model and not a physical one, we can violate physics and have objects self-intersect. You might overlap two spheres half-way and join them together to form one object. You'll only see the outer surface when you render the new double-sphere object. There actually are two objects that Imagine does not define as a group of points, edges, and faces: a perfect sphere and an infinite plane. These are the only exceptions to the normal definition of objects in Imagine. Well, OK, there's another. An axis containing NO points can still be manipulated as an object. It certainly won't show up in a render, but sometimes it's nice to use a lone axis as an invisible object in certain cases. You can also use the axis as the start of a brand new object. There are certain "Editors" in Imagine that allow us to view and manipulate objects in different ways. Some editors let you place objects in scenes, or define how the objects change with time. The Detail Editor is where objects are usually created and modified. It allows low-level editing of objects; you can add points and faces by hand, move them, delete old ones and in general be as picky as you like in adjusting every point. Defining objects point-by-point is obviously not very suited to complex objects, sometimes with THOUSANDS of points. There are more powerful controls that let you modify your object in more global ways. You can add pre-made 'primitive' objects like a cylinder or a torus (doughnut shape.) These primitive objects have the points, edges, and faces that define it already defined. There are certain tools that let you draw an outline, say the profile of a chess pawn, which is converted to a three-dimensional `spun' object, as if it was chiseled out on a lathe. Other tools let you slice off parts of your object using knives that you can build yourself. In general, object creation is done with these powerful tools, and picky touch-ups are the only time you grab and move individual points. A sculptor does not glue sand grains together! ------------------------------------------------------------------------- II. Looking at Stuff in the Detail Editor ------------------------------------------------------------------------- The Detail Editor is the program that lets you manipulate and modify objects in Imagine. Like the other editors (and any Amiga program, for that matter) Imagine gets input and directions from you by either moving the mouse and clicking it's buttons, or by typing on the keyboard. Most advanced options use pull-down menus to select the function you want to perform. An important trick, especially when you start using Imagine a lot, is keyboard-equivalents. This lets you select menu items via the keyboard, by pressing the right Amiga key along with another letter or number. All of the keyboard equivalents can be selected via pull-down menus, although not all menu items have keyboard equivalents. You'll find that learning the most used commands' keyboard equivalents can save a LOT of time. Its quick and easy to punch right-Amiga-o to zoom your view out; pulling the menu down repeatedly is a pain. A few other commands (especially moving, rotating, and scaling objects) use the keyboard to indicate what you want to do (move, rotate, or scale) while simultaneously using the mouse to control the extent of the transformation. You can get into it from any point in Imagine by selecting the menu item 'Detail Editor' from the Project pull-down menu. The screen should then split into four smaller windows with a thin status line at the bottom of the screen and another at the top. When you start up the Detail Editor, you'll see what is known as a "Quad-View." Are four windows labeled "top", "front", "right", and "perspective", which are different ways of viewing the object you are manipulating. It is difficult to manipulate 3D objects with a 2D mouse and a 2D screen, and the tri-view is a compromise that makes the best of these unfortunate 2D restrictions. The top, right, and front views show you the wire-frame skeleton of the object you're editing. A wire-frame is a view of your object with each edge shown as a line segment. Faces are NOT shown, so the object looks like it's built from pieces of wire that join at the outside edges of the object, hence the name wireframe. Wireframes have two advantages; they are much faster to draw than "solid" models, and since you can see _into_ the object, you can manipulate points and edges on the interior of the object that you wouldn't normally see. The top, right and front views are just that- a wireframe view of your object shown from the three orthogonal (right angle) directions. There is also a small axis at the bottom left corner of each view that shows the world's X,Y,Z coordinate system. In Imagine, the X,Y,Z is defined just like it is in mathematics- X is left to right, Y is in to out, and Z is down to up. Some 3D programs define Z to be in-and-out, so note Imagine's difference. There is an absolute "world" coordinate system defined by these axes. You can select "Coordinates" from the Display menu, which will continually display the coordinates of the mouse pointer in the world's X, Y, and Z system. The units that it measures in are arbitrary, but it is often convenient to call them "Imagine Units." Objects tend to be on the order of 10 to 100 Imagine Units in size, since this is a comfortable scale to deal with when we design scenes to be rendered. There is a grid shown in the three main windows. This grid is used to give you a sense of scale, and can be turned on or off in the Display menu. The spacing between the lines can be set by choosing "Grid Size", also from the Display window. The default is 20, which is a reasonable starting size. Some commands let you use the grid to snap objects to precise locations- these are the most common reasons you want to change the grid size. The fourth window (with no grid in it) is called the "perspective" window, which allows you to view your object from any direction. You can also change modes to view your object as a wireframe or as a "solid" model, where the faces become opaque so that you cannot see through your object. In this window, you CANNOT manipulate your objects- it is a view only. Each of the four windows can be quickly zoomed to take up the full screen very easily by merely clicking on the tall narrow box to the left of each view that contains the name of the window. The window will expand to take up the entire screen, allowing you to have a better view of whatever you're working on. To zoom back to the quad-view, just click on the name to the left again. To go immediately from a full screen display of one view to a full screen display of another, you just click the name of the new view to the right. Being able to see all four views at once is often an advantage, but so is seeing a larger, more detailed view. This method allows you to quickly and easily change how you look at your model. Just to get a sense of how this works, pull down the menu item 'Functions' and select 'Add primitive'. Click on the 'Torus' button and click on 'OK' to accept the default parameters. All this did was make a pre-defined object that we can look at when we manipulate the views. You should see an object in all four of the windows. This is the same object, just viewed from different directions. Remember the three main views (Top, Front, and Right) all show a WIREFRAME view from their respective directions, so the inside of the doughnut might look very complex. Perspective, the remaining view, also shows a wireframe view of the doughnut. You can change the view by manipulating the two white sliding boxes on the top and left of the window. The bottom white slider lets you view from different directions AROUND the object. If the slider is in the middle, you're looking at the front. If it's 3/4 of the way to the right, you're looking at the right hand side, and if it's all the way in either direction, you're looking at the back. The vertical slider on the right controls the ANGLE you're looking at the object from. Centered is a level perspective, all the way up gives you a straight-down view, and all the way down gives you a straight-up view. By combining these two sliders you can look at your object from any direction. You can change the perspective view by selecting 'wireframe' or 'solid' from the Display pull-down menu. Solid takes longer to show your object, but removes the points that are hidden, getting rid of the X-ray wireframe view. A final way of changing the perspective view is by selecting 'shaded' from the Mode pull-down menu and zooming the perspective view to the full screen. This shades the object in false black and white colors which sometimes lets you see the shape of the object more clearly. There are a few commands that let you change your absolute vantage of your object. You can zoom your view (on all windows) in and out by using 'zoom in' and 'zoom out' from the View menu. This lets you see more of your object at once, or just a certain portion. Each zoom in or out will double or halve the scale respectively. You can also select a numerical zoom by selecting 'set zoom' in the View menu, which allows more precise magnification levels by simply typing in a number. Zoom in and zoom out are often used, so knowing the keyboard equivalents of right-Amiga-i and right-Amiga-o can save a lot of time. To scroll the views around, you can click in one of the three main views, then use the arrow keys to move the view in whatever direction you like. You'll notice that if you change one view, the others will change as well- all of the views are linked so they show the same volume of space. You can also scroll the view by telling Imagine where you want the view centered. You select 'Re-center' from the View menu and click on where you want the new center of your view to be. Usually you click right in the middle of the object or area you're interested in. The keyboard equivalent of right-Amiga-. (period) is very convenient. The display that Imagine shows you is very important, as it is your interface in dealing with everything in the program. One important option is found in the Display menu; it is called "interlace". Interlace will change the screen resolution which the display uses. An interlaced screen is 400 pixels high, whereas a non-interlaced screen is only 200. Unfortunately, the interlaced display will flicker on many Amigas. An Amiga 3000 or a "flicker-fixer" equipped Amiga will be able to use interlaced mode without the flicker. The interlaced mode allows much more detail and more precise location of points, so it is by far the preferred mode to work in. Even if you do have a flickering display, it is probably worth the annoyance to have the extra resolution. A couple ways to reduce the flicker if you have it: you can muck with the monitor's contrast and brightness, or you can change the screen colors using the imagine.config file (see my Project tutorial). My favorite solution is wearing sunglasses- it works very well indeed, and you look cool while using your computer. ------------------------------------------------------------------------- III. Moving Stuff in the Detail Editor ------------------------------------------------------------------------- Knowing how to move your views around is important, as when you're manipulating an object you'll find yourself changing your viewpoints around constantly. There is a whole new set of commands for moving the OBJECTS in the editor around. In order to manipulate an object, we either have to load an existing one or start one from scratch. Imagine comes with several simple pre-built objects called 'primitives' that are very convenient to use as starting points for creating your own objects. Talking about these primitives doesn't really belong at this point in the tutorial, but it would be nice to be able to have something to look at and manipulate as each of the viewing and manipulation commands are presented. To make a primitive object, select 'add' in the Edit menu, and 'primitive' in the sub-menu. There are six simple shapes that Imagine will automagically create for you. They are a sphere, a cylinder, a cone, a disk, a plane, and a torus. When you select one, Imagine will ask how many points the object should have. With primitives like a sphere, the more points that define it, the smoother its appearance is going to be when rendered. Remember that even curved surfaces are made from triangles, and the surface becomes better defined with each point added. However, an object with more points than are necessary can become a burden; drawing the object in the editor takes more time, and although the final rendered picture with be higher quality with extra points, it will also take longer. Thus, when you add new primitive objects, Imagine asks what level of detail you would like. For example, the sphere primitive asks how many circle sections and how many vertical sections will make it up. The default is a reasonable number of defining points. If you were looking for a higher quality sphere because you were going to zoom in very closely to it, you might use extra points. If the object is going to sit in the background and not be examined closely, you might select fewer points. Most of the time, the defaults serve as a nice compromise, but you are much more likely to simplify the object as opposed to increase the default level of detail. The plane primitive in particular lends itself to simplification- most of the time you can bear with defining the simplest plane possible (2 triangles) as opposed to the overburdened default of a grid of 200 triangles. Each primitive lets you define the numbers of points that define it; the parameters that you can vary are all pretty self-explanatory. For example, the cylinder lets you define how many points are to form the circle around the rim, and also how many sections the body of the tube should be defined as. Other options (available for some primitives) are simple flags that define whether to close the ends of the cylinder (to create a hollow tube versus a log) or to 'stagger points' in some models. Staggering points increases the smoothness of curves- you should almost always leave it on. Note that the disk and the plane are actually flat objects- the others all have depth. All objects also let you define their size; this is quite straightforward. When you have loaded an object or added a primitive, you'll notice that you can see each point and edge in the wireframe. In addition, you'll see an AXIS, usually near the center of the object. In Imagine, EVERY OBJECT HAS IT'S OWN INDEPENDENT AXIS. An object's axis helps Imagine determine which way an object is facing, how it is scaled, and even what it's position is. Imagine doesn't understand what the objects ARE; it doesn't realize that a complex object like an airplane should orient itself with wheels down instead of balanced sideways on a wingtip. The axis actually defines the object's position; if you ask Imagine to move an object, Imagine really just moves the axis, and the object's points, edges, and faces are dragged along with it. When you rotate an object, the rotation occurs around the object's axis, as opposed to the world's absolute reference system. Scalings, where you change the size of the object, also use the object axis as a basis. When you want to manipulate a certain object, you have to tell Imagine which one (or ones!) that you're interested in, since you might have a dozen different object loaded at once. The way of choosing an object so you can manipulate it is just by clicking on it's axis. The object will turn a pretty blue color (or sometimes purple- more later!) which indicates that the object is chosen- any manipulation commands will be done on this one object. The object is said to be "picked", and Imagine knows that you want to apply commands to this object as opposed to another. Once you've picked an object, the most common manipulations are to move it around, rotate it, or scale it. These basic commands are often used, so Impulse has made it pretty easy to do. When you have a selected an object, you type the letter 'm' for move. The object will disappear (!) and be replaced by a big yellow "bounding box" which encloses the volume where your object was. This bounding box represents the size, shape, position, and orientation of your object. Since the box is so simple to draw, Imagine can update it in realtime as you manipulate it, allowing you to position it quickly and easily. After selecting the object and pressing "m", Imagine knows you want to move the object. Putting the cursor in any of the three main views, pressing the left mouse button and then dragging the mouse will drag your object in the direction you move. You do not have to click on the yellow box; anywhere in the view is fine. You can keep moving the object as long as you like; you can let go of the mouse button, move the pointer to another position in any of the three views, and continue moving the object. You are also welcome to zoom in and out, make one view full-screen, or re-center your views at any time. When you are finally done moving your object, pressing the space bar will accept the change and your object will be displayed as a wireframe in it's new location. If you've made a mistake, you can press the ESC key instead of the space bar. This also exits the move mode, but the object's position is unchanged from where it was before you started to move it. This is obviously useful for fixing mistakes or changing your mind. Two other commands work much like move: rotate and scale. If you select your object and press "r", you will rotate your object, and you'll see the yellow bounding box spin as you drag the mouse with the button down. You can also change spin axes (to pitch or bank the object, as opposed to yawing it) by pressing "x", "y", or "z" to define which axis you want to rotate around. All rotation is done around the OBJECT'S axis. Scaling is done by selecting "s" and dragging the mouse. Again, scaling is done relative to the OBJECT's axis. If the axis is in the center of the object, the object will grow in all directions. If it is at the bottom, the object will grow up and out, but not down. Each of these three commands (move, scale, and rotate) can be called either when you've picked an object or during any other move, scale, or rotate command. For example, you might pick an object, press "m" to move the object, position it in a new place, press "r" to spin it, then "s" to scale it. You do not have to press the space bar after every change; only after you are finally satisfied with the new location, size, and orientation of your object do you want to press the space bar to accept the changes you've made. Aborting by using the ESC key will remove all of the changes (movements, rotations, and scalings) that you've made. These manipulation commands are easy to use, and they have other controls that make certain manipulations even easier. At the bottom of the screen, there is a status bar that will highlight which mode you're in. If you are moving, the "M" in the "M=Move" at the bottom of the screen will be highlighted, and the "R" and "S" highlight when you're rotating or scaling. The "x", "y", and "z" commands that allow you to change rotation axes also work in moving and scaling. They act in these two modes as toggles- when you start a move, you are free to move it in all three directions, X, Y, and Z. You might want to restrict a direction of motion, though, if for example you are moving a table along a floor and you didn't want to accidentally lift the table into the air as you moved it left and right. Pressing the "x", "y", and "z" keys will toggle the allowable directions on and off, so pressing "z" will anchor the table's height, and pressing "z" again will allow you to lift it up if you change your mind. This also works in the scaling mode; if you want to make an object narrower without changing its height, you might toggle "z" and scale the object down. With the "z" toggle off, the object will maintain it's Z height, but will shrink in the X and Y directions. At any time, the display at the bottom of the screen shows the letters "X-Y-Z" and highlights the directions that are "active" or changeable. A related shortcut is using the capital letters "X", "Y", and "Z", which set the toggles to allow movement and scaling in one direction only. If you wanted to lift a table straight up, you just type "Z" and the table will be free to move up and down, but not in the X or Y directions. This method of setting the toggles overrides whatever position they were set in before, but you can use the individual toggles afterwards to set whatever freedoms you like. Imagine gives you even more flexibility if you want to use it. Whenever you move, rotate, and scale an object, it is based on a certain coordinate system. The default is to use the standard coordinate system- the set of axes that is fixed in place and shown at the bottom left of the three main views. This is called the "world" coordinate system. However, each object has it's own "local" coordinate system, defined by it's own axis. Imagine allows you to use a local coordinate system instead of the world system if you like. For example, if you have an object in the shape of a plane, the local coordinate system probably has the Y axis (going front to back) in line with the main fuselage of the plane. Using "r" to rotate the plane, you can easily position it so that it is angled up like it is climbing into the sky. If you then wanted to move it in a straight line along it's "flight path", the direction it's pointing, you could select move, and try to judge by eye the new position in the direction in front of the plane. If, instead, you select local mode (by using "l") and restrict motion along the Y direction by typing "Y", the plane will move smoothly along the line it's pointed along. In the world coordinate system, it's moving in both the Y and Z directions, but in it's local coordinate system, it's moving only in it's Y direction. To switch between coordinate systems, you just type "l" and "w" whenever you want to change. The current coordinate system has L or W highlighted at the bottom display just like the X-Y-Z indicators. Many times the local and world coordinate systems will be the same, so one is equivalent to the other. One final option when you're manipulating objects allows you to manipulate the axis of the object independently. If you want to move, scale, or rotate an object's axis [without simultaneously affecting the object!] you can use "M", "R", and "S", the capital letter versions of the object manipulation commands, to affect only the axis. There are some occasions you might want to do this for fancy tricks, but most of the time, you just want to move the axis around just so that it lies near the center of your object. The standard commands to move, rotate, and scale objects have been streamlined for ease of use since they are performed so often. Sometimes, however, they are somewhat lacking, especially when you need precise control over how your object is to be manipulated. For the precise control of object manipulation, Imagine has a special command called "Transform" which allows you to numerically control your object as opposed to judging by eye. The transform command works much like the standard interactive commands in that you first select your object (by clicking on it's axis) and then telling Imagine what to do to it. To enter the transform command, you click on the object (it becomes blue or purple) and pull down the menu item "transform" from the Object menu. A small requester will appear. You have six options you can choose from: translate, rotate, scale, position, alignment, and size. You also enter X, Y, and Z arguments. Translate takes the X, Y and Z arguments and moves (translates) the object that distance. Rotate will rotate the object around the axis you specify by an amount (in degrees) you specify in X, Y and Z. Performing more than one rotation at once is legal, but it is easy to make mistakes in final orientation. If you rotate around more than one axis at once, the Z rotation is performed, then the X rotation, then the Y rotation. Scale will scale your object by a certain factor. To double the size, just enter 2 in each of the X, Y, and Z boxes. A negative number is completely legal, and if one or three of the scalings is negative, you'll actually get a scaled mirror image of your original object. Position is like Translate in that it moves your object. Instead of moving a certain distance, however, it moves to absolute world coordinates. Alignment is also absolute; it will rotate your object in whatever way necessary to align in the direction you specify, regardless of the original orientation. Setting X, Y, Z all to zero will make the object line up exactly with the world axes. Size is again absolute. It uses the axis size as a benchmark, and will scale the object (and it's axis) to an absolute size. The "default" size that all axes start out at is 32 Imagine Units, so entering an XYZ size of 32 32 32 will bring most objects back to their virgin sizes. To use any of these sub-commands, just click on the box next to it's name and type in the appropriate X, Y, and Z arguments in the boxes to the right. Selecting "OK" will perform the manipulations, "cancel" will abort without affecting your object. You have the option to use world or local coordinates, just as in the interactive commands; just click on either box to decide. The default is the world system. You can also manipulate only the axis (like the capital letter commands in interactive manipulation) by selecting "transform axis only." Most manipulations use the interactive controls, and the transformation requester is used only for accurate, measured changes. One problem that you may run into after an interactive or a transformed manipulation is a "dirty" screen. Imagine erases the old object from before your move or scale or rotate, and draws it in the new position. However, to save time, it will not redraw any other wireframe object that was in view. This means that the areas were the old object intersected any other object in the view will be blank; part of the other object will be erased. If you want to check to see if this is the case, you can select "Redraw" from the Display menu, which will redraw all of the objects, eliminating the problem. One case where this is almost necessary is when you have multiple copies of an object at the same place. If you move one copy, the other isn't redrawn. Since it was in the exact same location as the old, erased, object, it looks like it has disappeared! This is easy to fix with redraw. It is another oft-used command, so knowing the keyboard equivalent of right-Amiga-r is handy. A problem you'll run into when manipulating complex objects is the sheer time it takes to redraw the wireframe model (in three views). Imagine has a way to speed the display of these objects- it shows the bounding box of the object (like the one shown in interactive manipulation) instead of the wireframe. You LOOSE the detailed view of your object, but you can still see the position, size, and orientation. To make an object "quickdraw" in this mode, you can use three commands in the Functions menu. "Quickdraw all" will make all of the objects display in quickdraw mode. "Quickdraw none" will make all objects display the normal wireframe. "Quickdraw pick" will make your picked (blue or purple highlighted) object display in quickdraw mode. These quickdraw boxes are very handy, and since they can be toggled at any time in the Detail Editor, it makes sense to use them when screen updates start to get too slow. ------------------------------------------------------------------------- IV. Harvesting and Sorting with Pick ------------------------------------------------------------------------- Since you can have many objects loaded at once, there has to be a way for you to tell Imagine what object or objects you want to deal with. You've done this already, by clicking on an object's axis, and watching it turn color. This shows that the picked object is ready to be manipulated on. What if we want to manipulate more than one object at a time? A standard way to "multi-pick" things (like icons in AmigaDos, or objects in Imagine) is to use the shift key. By holding the shift key as you click on objects, Imagine knows you want ALL of them picked, not just the latest one. In fact, if you press the shift key, the display line at the top of the screen will change to show how many objects are picked. Commands will affect all of the picked objects, not just one. In the case of moving, scaling, and rotating more than one object, the FIRST picked object's axis defines the basis of all the manipulations, as well as the local coordinate system for manipulating all of the objects. There are easier way to pick many objects than by repeatedly clicking on each object's axis. Imagine allows you to change how objects are picked by the "Pick Method" submenu in the Modes menu. The default is "click", which means that when you click directly on an object's axis, it will become picked. Other methods of picking can be chosen from the pick method submenu. If you use "drag box", instead of clicking on the object axes, you should press and hold the mouse button while dragging the mouse. A large box will follow your mouse, and when you release the button, an object within the box will become picked. If you press and hold the shift key when you release the mouse button, ALL of the objects within the box will become picked. Lasso is similar, but more versatile. You press and hold the button while drawing a large circle or oval or squiggly shape. When you release the button, an object within the region you've drawn will become picked. Again, you can hold the shift key to pick ALL of the objects within. A final option in the pick method submenu is called "Lock". Lock isn't a method of picking; it really has more to do with when moving picked objects. Lock is a flag; you can toggle it on and off by selecting it from its submenu. When Lock is on, any moved object will snap to the nearest grid location when released. This is automatic and is easier than using the one-time "Snap to Grid" (described later, I promise!) again and again when you're trying to get precise placement. Two other utility commands can be found in the Pick/Select menu. "Pick all" will pick ALL of the objects in your workspace. "Unpick Last" will allow you to remove the last object you picked from your set of picked objects. This is handy when you pick one too many objects and you want to unpick the last one you chose. It is easy to pick objects or sets of objects using the different pick methods. There is actually another powerful way to change what object or objects are picked; it is called "select." There is a very, very important difference between a "picked" object and a "selected" object; you've been using pick to highlight objects and manipulate them. Select is sort of a pick-wanna-be. One problem that can occur is when two object axes are directly on top of each other. If you click on the common axis location, one of the objects will become picked. (The first one that was created or loaded into the Editor). If you click again, the same object will remain picked and the second object will just sit there. If you hold the shift key and click on the common axis again, the second object WILL be picked, but now BOTH objects are picked. If you want to pick just the second object and not the first, you can either MOVE one object just to uncover the other axis, or you can use select. There is a solution when picking (or unpicking) objects becomes awkward (or impossible!). SELECT allows you to control what objects are picked by allowing you to add and remove objects from your set of picked objects one at a time. Think of buying lunch at a cafeteria, and you pick which food you want to eat. One way of "picking" food to add to your tray is by having the lunch worker point to each of the cafeteria's food bins, and saying "No, the next one, the next one, the next one- yes! That one!" as the worker points to the foods in turn. As the worker selects item after item, you can choose to PICK the item he's pointing to at any time. The analogy extends; What if your arms are full of cafeteria food and you want to put some back? Your arms are busy holding all the food; you can't easily grab an item and put it down. You can, however, ask a friend to "unpick" the item for you. If your friend has trouble with big words (like the names of food), he can just point at each food in your arms in turn until he points to the granola yogurt you want to put down. You then say "Yes, yes! Get rid of that!" This is exactly what select allows you to do. Your arms are full with picked objects. You can't just click on an object to "unpick" it because Imagine thinks you're just making sure you have it picked. You also might have problems indicating the right object to pick, as in the case of two objects on top of one another. The major difference between the the cafeteria and Imagine is that your mentally challenged friend is also the cafeteria worker, and will point to both types of objects for you. Select works by allowing you to highlight different objects in a controlled way. A "selected" object might be picked or not; A normal object is white, a selected object is orange, a picked object is blue, and a picked AND selected object is purple. Only one object is ever be selected at once, which is helpful in reducing confusion. The commands for selecting objects are completely different from those of PICKing objects; the whole point of select is that sometimes the methods used to pick objects are awkward, and select gives you an alternative way to pick them. The easiest and most common method of selecting an object is by using two commands, "Select next" and "Select previous", both found in the Pick/Select menu. Using "Select next" repeatedly will cycle through all of the objects in the order that they were created or loaded. This command does NOT care whether the object is picked or not; it will select all objects one at a time. "Select next" is often a command you want to repeat, so knowing the keyboard shortcut of right-amiga-n is almost necessary. By repeatedly using select next, ANY object can be selected because Select next will eventually reach it. "Select previous", right-amiga-p, will select objects in the opposite order, in case you overshoot with select next. One convenience is that when an object becomes selected, your view will jump to center the object on the screen, always allowing you to see what you just selected. When an object is selected, there are certain commands that will cause it to become picked or un-picked. The most common command is called "pick select", which can be found in the Pick/Select menu. When you use this menu option, the selected object will become picked. If the selected object is picked and you want to un-pick it, you can use "unpick select" from the pick/select menu to unpick it. "Select next" is kinda klunky, especially if you know exactly what object you want to select. One quick command that is sometimes useful is "Home", which selects the very first object you created or loaded into the Editor. Two other useful commands to quickly select specific objects are "Find by Name" and "Find requester", both found in the Functions menu. "Find by Name" allows you to type in an object's name (assigned in the Attributes requester, more later) and your view will shift to center on the object you named. In addition, the object becomes selected, allowing you to pick-select or unpick-select it. The "Find by Requester" does the same thing except it displays the names of all of the currently loaded objects, and you just click on the name you want to select. This requester is also useful because it tells you the size (# of points, edges, and faces) of each object, which is an excellent judge of object complexity. It's also fun to say "Cool! My tomato has 1,821 points!" ------------------------------------------------------------------------- V. Hierarchies and Complex objects ------------------------------------------------------------------------- With complex models, sometimes you don't want to make one huge, mungo object to represent the entire model. You might want to make a forest object that has 20 trees in it, and it seems silly to carve the whole thing out of one block. Or, you might be building an object that is logically a bunch of separate parts, like a clock with a face, a pendulum, two hands, and a frame. Another important ability you might want is to be able to give different parts of a complex object different attributes, or colors. Imagine lets you color and define the look of your objects in different ways, and you can even tell it to make different parts of the same object look different. But when you're building something like a window, the glass panes are considerably different than the wood frames; it is easier to define each as a separate object then somehow group them together. There is a function that lets you do exactly this- group objects together. When you have a model that you want to make (and keep!) in separate sections, Imagine allows you to establish a group of objects which will stay together. It allows you to treat the group as an entire ensemble (if you want to move everything, or apply a command to the whole set), or you can pick out one particular object and deal with it independently. Grouping is very easy to do. If you want to group two objects together, you click on one object, then press the shift key and click on the other. Remember that this is just the method of picking more than one object at once. When you have multi-picked the objects, you select "group" from the Object menu. A purple line will appear joining the axes of the objects. The first object that was selected becomes the "parent" of the group. If you group more than two objects, the purple "group" lines all run from each "child" object to the parent object. This lets you see which axis to click on to pick the entire group. Sometimes it is nice to assign a lone axis as the parent of a group, especially when no part of a group really doesn't lend itself to being a parent. Splitting a group back into it's component parts is also easy; just pick the group by clicking on the parent. The entire group will become picked, and selecting "Ungroup" from the Object menu will split the group. The purple joining lines will disappear, and each child will be independent again. Once a group is made, it can be treated almost identically to an ungrouped object. You can pick it (by clicking on the parent) and the entire group will become highlighted. You can then move, scale, or rotate the entire group as a whole. If you click on a CHILD object, the child will be picked, but not the group. You can then move, scale, or rotate it independently of the group, assign it individual attributes, or perform a command on it independently of the rest of the group. Even when you move the child object around, it will STAY grouped; you must use "ungroup" to ungroup objects. There are modes where you can pick parents separate from their children; this is described in the next section. In addition, you can make groups of groups. Or groups of groups of groups. This is done exactly the same as before; you can pick one group, multi-pick a second, and group them. Having these multi-layer groups is sometimes very useful. One excellent example would be in modeling a human figure. You might make a finger group that contains all of the knuckles, a hand group including a palm, four finger groups, and a thumb group, an arm group consisting of a hand group, a wrist, a forearm, and an elbow, and a body group consisting of a head group, a torso, two leg groups, and two arm groups. This kind of nested grouping is called a "hierarchy", where the body is the great-granddaddy of a knuckle. One great advantage is obvious when you want to move an arm. You pick the arm, and rotate it around the shoulder. All of the arm's children follow it, so the arm moves as a whole. You do NOT have to move 15 knuckles, a palm, a wrist, a forearm, and so on. If you want to adjust a finger, you can manipulate it and the knuckles will move together, but the arm will be unaffected. If you move the main parent body group, everything follows along as if the body were just one solid object, as opposed to dozens of parts. Hierarchies are obviously suited for complex models. Groups are useful when you have sub-parts of an object you want to keep together. Sometimes grouping simple objects is still useful even if there is no hierarchy to follow, since the individual objects are free to move apart from the parent, and can easily be assigned different attributes. For example, if you're designing a human face, you might cause the eyeballs in the head to be an additional grouped object as opposed to just molded into the main face. Later, if you wanted to change the eye (make it a different color, or replace it with a different type of eye (chrome eyeballs! Cool!)) you can easily select the eye and change or replace it. This advantage compounds the other advantages of grouping; you can later animate the eyes looking in different directions, and you can easily change the attributes or texture of the eye while leaving the face undisturbed. ------------------------------------------------------------------------- VII. Pick, Add, Drag. Pick, Add, Drag. Geez, how boring! ------------------------------------------------------------------------- There are some useful commands that act on picked objects other than just moving, rotating, and scaling. Two of the most obvious are "Load" and "Save". Load will load a new object in from disk- it will give you a file requester which you can choose the filename from. The most common place to put objects are in your "objects" subdirectory in your project directory.See the Project Editor tutorial for the complete Imagine file structure. Am important suggestion; use descriptive names and extensions. I talked about this a lot in my Project tutorial, but it's worth repeating. "Obj1" is going to mean nothing to you an hour from now. "tablecloth.iob" tells you that this is an Imagine object of a tablecloth- a useful description. Some suggested file extensions: .iob Imagine Object. Loads into the Detail Editor .iout Imagine Object which is a faceless outline .ifm Imagine Form. Loads into the Form or Detail Editor .iff Amiga picture or brush (standard) .ham Amiga picture or brush in Hold-And-Modify format .iff24 24-bit Amiga picture of brush. Highest quality. .spth Imagine spline path .lpth Imagine line path Save will take the picked object or group and save it onto disk. Note that GROUPS will save as one big group, as long as you have the whole group picked by clicking on the parent. You can give the saved object or group any name you want, and you'll probably want use an extension of ".iob". If you pick a child of a group and save it, you save ONLY that object (and its children), and NOT the entire group it belongs to. Another command you can apply to picked objects is "Snap to Grid" from the Functions menu. It operates on all picked objects, moving each of them so that their axis lies on top of the nearest grid intersection. This is very useful in trying to line up objects or for precise positioning. This is much like a one-time "Lock". There are a few other utility object commands. "Cut", "Copy", and "Paste" are found in the Object menu. "Cut" will remove your object from the Imagine world and store it in memory. When you select "Paste", the object will be re-inserted into the world at the same place it was prior to the cut. In fact, the object is STILL retained in memory, so you can move the restored object around and use "Paste" again to get a second copy to manipulate. You can repeat "Paste" as many times as you like to get copies of objects. "Copy" is like cut, except the object is not removed from the world after being copied to memory. You can use "Paste" to add multiple copies to the world. Since the pasted objects are all put in the same location, often you'll have to move one copy to get to the next. Judicious use of "Redraw" can help in showing exactly what copies are still floating around. An incredibly useful command for making complex objects is called "Join", which can be found in the Functions menu. If you pick two or more objects, join will assemble them into one single object. The new conglomerate object will have use the axis of the first object that was picked, and will contain all of the points, edges, and faces of all of the joined objects. Joined objects are difficult to unjoin later, so only use it when you WANT a solid object. Join is used constantly- you might build a car with the body sides, and "join" on a side mirror, then join the roof on, then join the floor. Remember the advantages of groups though; you probably DON'T want to join the tires to the car; if you group them you can rotate them later, as well as define the chrome hubcap separately from the car's paint and the rubber tire. "Merge" is also found in the Functions menu. It is more of a utility command. It will remove any duplicate faces, edges or points in your object. Especially after you JOIN objects, you might have a lot of points lying on top of one another. Merge removes these extra, unneeded points, speeding rendering and even display in the editors. Merge also helps Phong shading; more about Phong shading in the soon to come Attribute Tutorial. Delete is pretty obvious command. It can also be found in the Functions menu. When you use delete, every picked object will be removed from the world. This command is used a lot to get rid of cruft and deadwood, so knowing the keyboard shortcut of right-amiga-d is useful. As with all of the editors, Imagine has one level of "Undo", which can be selected from the Project menu. When using dangerous commands like Delete, being able to recover from the command is important. Undo will work with almost any command. You can also undo an undo, reinstating a command you decided you wanted anyway. ------------------------------------------------------------------------- VIII. Spraypaint and Picture Frames ------------------------------------------------------------------------- The low-level commands to create and manipulate objects are sufficient to create any model you can think of. An additional level of control you have is the ability to define the surface color and attributes of your object. A flat plane might be made of two triangles, but depending on how you set the attributes of the plane, it might render as a pane of glass, a reflective mirror, a wood tabletop, a piece of graph paper, or a picture of your grandmother. Defining the surface characteristics of objects gives them their character. Luckily, Imagine gives you excellent control of these attributes. Every object has a set of attributes that can be modified. In a group, every object can have different attributes from the parent; when you select a group, you only modify the parent's attributes. To change any attributes, just pick an object and select "Attributes" from the Object menu. A requester will appear, and you can select different properties to change. In addition, you can place brush maps and textures on the object, as well as add or change the object's name. Choosing and setting attributes is immensely important to make your objects look good. Setting textures and especially brushmaps give you near-infinite control on what your object's surface looks like. I have written full tutorials on both the use of texture and brushmaps, and plan to write one on setting attributes. The choices in the attributes requester are so important that they deserve a tutorial unto themselves. I haven't written the attribute tutorial as of today (6/11/91), but look for it by the end of July. ------------------------------------------------------------------------- IX. A Mode for Every Season ------------------------------------------------------------------------- The basic commands to pick, move, and view the world and everything in it are very important, as they are used constantly. The actual work you perform in building objects depends on the user changing the view and manipulating the objects almost without thought. No matter how good we are at manipulating objects and changing the view, using these commands will never BUILD an object for us. To do this, Imagine has different MODES that it performs different actions in. Some modes allow us to manipulate objects and groups, as we have been doing already. Other modes let us pick and manipulate not objects, but the POINTS of an object, or the edges, or the faces. Still other modes let us drag points around in different ways. Some let us add NEW points, edges, and faces. (Aha! So that's how we can build our own objects!) These modes are easy to change; you can just pull down the Mode menu and select which mode you would like to be in. The current mode is always displayed in the status line at the top of the screen; this is often handy when you get confused about what you're doing. The keyboard equivalents for changing the current mode all use right-Amiga and a digit; this makes the keypad become a "mode selector" if you don't want to use the pull-down menus and have stuff it takes to remember which digit is which mode. Personally, I don't have the stuff, so I bear with the pulldown menu rather than strain my poor brain. The default mode is "Pick Groups", which means that whenever you click on a group, it will be picked. (Simple!) If you want to pick individual objects, EVEN IF THEY ARE THE PARENT OF A GROUP, there is a mode called "Pick Objects." Just select it from the mode menu, and now when you click on any object (in a group or not, child or parent) it will be selected. You cal obviously multi-select it using the shift key. When you are dealing with ungrouped objects, "Pick groups" and "Pick objects" work identically. Different modes let you deal with the different parts of an object. Up until this time, we've always dealt with entire objects at a time. We could rotate, scale, and move them, add them, group them, and delete them, though we could not affect their basic structure. The remaining modes all work on PARTS of objects, not objects themselves. One important note is that to even enter these other modes, you must have selected at least one object (or group) for the new modes to act apon. You'll also find that I consistently lied to you in most of the previous sections. I always referred to picking objects as opposed to picking anything else. ALL of the pick and select commands except Find work equally well in picking faces, edges, or points as opposed to just objects or groups. Most other commands like Delete will work on the parts of an object as well. One new mode is "Pick points." If you pick an object or group and enter the pick points" mode, the object will turn white (the object is NOT picked anymore!) and it's points will all become visible (they will show up as small squares.) Now you are in a different mode; you are no longer picking and selecting OBJECTS, you are dealing exclusively with points. You can then click on the points which will turn orange as you pick them. You can use the shift key to multi-pick, or the lasso and drag box to grab many points at once. You can also select points, and use all of the selection tools to help you get any subset of points you want. Selected points are green, picked points are orange, and picked and selected points are yellow. When you're picking points, edges, or faces, Imagine will work ONLY with the points, edges, or faces in the object that was picked before you chose the "pick points (or edges or faces)" mode. This prevents you from confusing one object's points with another's. When you scroll around your view or redraw the screen, the other objects won't even be updated, so don't get scared if they seem to disappear. When you re-enter pick objects or pick groups mode, all of the objects will re-appear. Just because you can pick something doesn't mean you can perform every command on them. In the case of points, you can delete your picked points, or use the transformation requester to translate them; interactive dragging is actually another mode of it's own, though. When you delete a point, you delete any edges and faces that that point help form. You cannot do things to selected points that make no sense (like grouping them, or saving them to a file)- that's just weird. You can perform some other commands that aren't applicable to objects as a whole, however. For example, a very useful command is called "split." It takes the selected points, removes them from the original object, and gives them their own axis. In effect, the original object is split into two parts defined by the points you picked. Any connecting faces or edges are deleted (two objects do NOT share!). This might be very useful when you have a logo and want to pull one letter out of the object to do something special with it. One command that is unique to pick points mode is "taut", which is found in the Functions menu. If you select three or more points and select "taut", the middle points will jump to the line segment defined by the first and last points. This command might be useful to line up a bunch of points in a straight line quickly. Taut does NOT work with anything other than picked points. Picked points can be manipulated with the Transform command. The picked points can be translated, scaled, rotated, and positioned INDEPENDENTLY of the rest of the object. Rotations and scalings all use the object's axis as a reference point. Absolute positioning will move the FIRST point you pick to the location you choose, and the rest of the picked points will be translated an equal amount. Interactive dragging is accomplished using the "drag points" mode. Picking edges is similar to picking points, except to specify an edge you just click on the two points that make it up, or lasso or drag box the entire edge. Just like points, you can't perform every command on them. You can delete them and split them. You CANNOT translate edges or use taut on them. Deleted edges will delete any face they belong to, but the points in the edges will NOT be removed. A new command you cannot perform on points but can use on faces is called "fracture." This command is in the Functions pull down menu, and is often very useful. The fracture command will take and break each edge into two edges, with an additional point added to the midpoint of each selected edge. This command is very useful when you need to increase the detail level at a certain area of an object; the extra edges that appear allow you to manipulate them to add finer details and structures. Select Faces is again pretty straightforward. You must click on ALL THREE of the points that make up the face to select it. Fracture works very well on faces; it splits each face (one triangle) into four triangles defined by the midpoints of the face. The new faces can then be manipulated for higher object definition. Deleting faces removes the faces, but not the edges or points that it was made up of. Picked faces allow you to characterize an object's appearance in local areas. The attribute requester normally allows you to give the object overall color, reflection, and transparency values. You can actually set these for every single face, if you like. You can pick one or more faces, select "attributes" from the Object menu, and use the sliders to set the color, transparency, and filter values for the face or faces. You will NOT see any change in the appearance of your object when you do this, but when you render, the faces you selected will all override the default object color with the attributes you selected. A danger is that face attributes are somewhat fragile. If you join or merge objects or start deleting or adding points to it, all face coloring is often lost. To keep this from happening, color individual faces LAST, just before saving your object. A final note about face coloring; don't depend on it for coloring your objects in complex ways. Using grouped objects or brush maps is much more robust and allows better control. Coloring individual faces is useful mostly for quick and dirty attribute definition or for making small details that aren't worth the bother of a brushmap or extra object. Both "pick edges" and "pick faces" will allow you to split off the selected parts of the object to create two new objects by using "split", just as split works with selected points. Three additional modes are "add points", "add edges", and "add faces". Add points will add an additional point to your object in the location you click on. Add edges lets you click on TWO points and will add a new edge joining them. Add faces mode will let you add a new face to an object by clicking on the THREE points that make it up. "Add lines" mode is a convenient combination of "add points" and "add edges". As you click, a new point is added in the location you point to, and further clicks will add additional points along with an edge joining the latest point to the one that was immediately preceding it. Thus, a few clicks around the border of a rough circle will make a set of points with the edges following the outline of that circle. Carefully clicking on the location of an existing point will cause the new line to connect to to that point, so making closed shapes is easier. "Drag points" mode allows you to interactively drag individual points in your object around. If you select this mode, you can click on any point and drag it to a new location interactively. Any edges or faces that this point is connected to will follow the point to its new location. Dragging multiple points is also easy- just use the shift key, multi-pick the points by clicking on each in turn, and when you want to start dragging them, just release the shift key. AN IMPORTANT TECHNIQUE: What if you want to select a point or points in one view, and drag them in an orthogonal direction? For example, you have a plane defined by a horizontal 10 by 10 grid, and you want to select a bunch of points from the middle and pull them up. If you click on the points from the top view, you can easily select any of the points you're interested in, but you can only drag them left and right, forward and back. You want to be able to drag them UP. Here's the method for doing this: it is invaluable, so remember it. Whether you want to move one point or a hundred, press the shift key to multi-pick the points. Click on the points you want to move in ANY view, keeping the shift key depressed. To move all of these points, KEEP THE SHIFT KEY DEPRESSED and move the mouse to the view where you want to move the points in. Press and hold the left button, then RELEASE the shift key. The picked points will move with your mouse for as long as you keep the button held down. Releasing the button will anchor the points. In the example with the 10 by 10 horizontal grid, you would press shift, click on the points you want in the top view, move to the front (or right) view, release the shift key, move the points up, and release the mouse button. That's it! Magnetism, a more complex way of dragging points will be covered in the "advanced" Detail tutorial. One problem with manipulating points, edges, and faces is picking the RIGHT point. When the object is complex, the wireframe displays can get very cluttered. There is a convenient way of simplifying a view to get points out of your view- it is a mode called "hide points". In hide points mode, any points you select (with click, drag box, or lasso) will disappear from view- they will go away. They still exist, they just aren't displayed and can't be picked or manipulated. You can "hide" whatever points that get in the way of your work area, then change modes, and manipulate the non-hidden parts of your object. Selecting "pick objects" or "pick groups" will make the hidden points re-appear. For example, if you're working on a helicopter model and you want to work on the rotor alone, you might select "hide points" mode, and use the lasso to indicate the main helicopter body. The rotor is left alone, and after changing into drag points or select faces mode, it is easy to indicate what portion of the rotor you want to deal with without accidentally modifying the helicopter body. Selecting "pick objects" mode makes the entire helicopter, with the rotor changes, reappear. In theory, you can create any object by adding an axis, then adding points, edges and faces. In practice, these are very low level commands; you generally use the more powerful commands like "mold" and "slice" found in the Object editor. The low level select and add modes are built to give you the low level control that you sometimes need; however, they are more for defining basic outlines that are then used in the more powerful Object commands, or for touching up small details on nearly complete objects. The next Detail tutorial will talk about these commands. ------------------------------------------------------------------------- X. More to come ------------------------------------------------------------------------- This tutorial describes the important fundamentals of using the Detail Editor. Remember that most object creation mostly uses the advanced functions like "mold" and "slice". My next tutorial will deal with these powerful tools; however, the basics that are described in this tutorial are very useful and knowing how to move your view and manipulate objects is virtually essential. I also plan to write a general tutorial (with examples!) describing object creation; knowing all the menu commands doesn't give you a sense of the strategies to follow or steps to take to create a specific model. Another important discussion in the followup Detail Tutorial will describe different classes of objects: lone axes, line paths, outlines, flat objects, and "normal" objects. Expect the second tutorial around the middle to end of July, 1991. Whew! Another tutorial whipped out! Actually, this one only covers 2/3 of an Editor, but including everything would really stretch the limits of a coherent text file. (This one is only 71K!) I am very glad to have gotten a lot of positive response from my last tutorial on the Forms Editor; I hope this one (which covers a much more complex Editor) is equally well received. If you have any questions, you are welcome to write me or send e-mail to the Internet Imagine Mailing list, imagine@athena.mit.edu. Any suggestions or "I want to see this in a tutorial" questions sent to me personally will be gladly accepted. -Steve ------------------------------------------------------------------- Steve Worley spworley@athena.mit.edu ------------------------------------------------------------------- Steve Worley 290 Massachusetts Ave. (this address soon to change, but mail sent Cambridge MA 02139 here will eventually make it to me anyway...) ---------------------------------------------- This file and the text therein is Copyright 1991 by Steven P. Worley. All rights reserved. This file may be distributed freely in computer or paper form as long as 1) It is unchanged and unedited 2) is distributed in its entirely 3) gives proper credit to the author, Steven Worley. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ APPENDIX B: FORMS TUTORIAL (by Steve Worley) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ This is my long-promised tutorial on the Forms Editor. It is split into two sections in order to keep mailers from choking. The first part (which you are reading now) describes how the Forms Editor creates its objects and what each menu option does. The second file contains three step-by-step examples that show you how real objects are planned and built in the Forms Editor. There is a set of screen grabs and example pictures on hubcap.clemson.edu in the pub/amiga/incoming/IMAGINE/MISC directory in a file called Form_Tutorial.lzh. You might want to download this file to help with the example forms I describe. I've spent a LOT of time in writing over 40K in text to make this tutorial and especially the example pictures. Any feedback is GREATLY appreciated, as it will spur me on to doing a Detail Editor tutorial sooner. The Imagine Forms Editor The creation of objects in Imagine is certainly not as intuitive as the process you used in kindergarten to squeeze clay into vague animal shapes. Instead of a real life view of the object, you get a complex quad-view display. Instead of using your grubby fingers, you have a very 2-D mouse. Most importantly, if you wanted to change the shape of a clay model, you just pushed and pulled on it. In Imagine (and any other computer modeler) you have to use a very specific set of tools to manipulate your objects. No matter how powerful these tools are, they are still going to limit the ways you can manipulate your creation. This tutorial is a taste of the Forms editor. The editor is VERY powerful, but not necessary easy to describe. It allows you to create certain types of detailed object shapes quickly and easily, and is certainly not limited to the asteroid-like example in the Imagine manual. --------------------------------- Part I- What IS the Forms Editor? --------------------------------- You might have noticed that Forms has in essence NO description in the Imagine manual. The manual's tutorials do not describe how the Form Editor works or why you should use it other than "It is very powerful" and "It can make organic forms easily." I don't blame Rick Rodriguez- the Forms Editor is difficult to understand and hell to explain even in person. It is very hard to describe how the Forms Editor works. It uses a very strange method of defining it's objects that is difficult to put into words. You might want to re-read this explanation a few times, since the Form Editor is much easier to control when you know what it is doing and how it determines your object's shape. The Forms Editor defines it's objects as a set of varying radii cross-sections. You have a great amount of control over both the shape and size of these cross-sections. Think of an orange, and the wedge-shape segments that make up the orange's cross section. If the orange wedge were in the shape of a square instead of a half-circle, the orange would become a cylinder instead of a sphere. If you make the square wedges in one direction a different size than the wedges at 90 degrees to them, the orange distorts into a squashed cylinder which looks like an oval from the top. If you define the wedges to be square in one direction and crescent shaped the other (90 degree) direction, you will get an orange shaped like a cross between a cylinder and a sphere- the resulting object is something like a sphere with two ends sanded to a smoothly beveled edge. Another way we might mutate the orange is instead of changing the shape of the wedges, we can change the radius of each wedge as we look at them from the top of the orange. If the wedges on the front side of the orange have a larger radius than the rest of the wedges (but the same shape), the orange is going to look like it is ballooning with air pressure with one swollen side. If the radius of each wedge changes as you go around the orange (perhaps an alternating big-small-big-small), the orange will take on a fluted, star-like horizontal cross-section. Any vertical cross-section will still be circular. Got that so far? Well, this is exactly what the Form Editor allows you to do. You can define a the shape of these wedges in both the front-to-back and left-to-right directions, as well as having completely independent control over the radial size of these cross sections. When you mix these abilities, you can produce an AMAZING number of complex shapes, especially since each wedge can loop up and down and form holes and cross over itself. No tree ever made an orange with the peel intersecting itself, but the Forms editor will gladly create a shape like this for you. The Forms editor handles all of the details and bookkeeping, and lets you worry about your form. The actual mechanics of producing the object are a bit complex, though straightforward. There are four user-defined cross sections (at 0, 90, 180, and 270 degrees, looking from the top) each with the same number of points defining it. Every section around the orange comes out at a certain angle (like 45 degrees) and its cross section is interpolated from the four pre-defined cross sections (probably linearly, it's hard to tell). For the 45 degree example, the cross section would be formed by taking the 0 degree and 90 degree user defined cross sections and assigning each 45 degree cross section point a position mid-way between its corresponding location at the 0 degree cross section and its location at the 90 degree cross section. Thus, the cross section will smoothly change from one shape to another as you move around the form. Once the vertical cross section is determined, they are scaled radially by an amount given by the radius of the user defined HORIZONTAL cross section (the top view). An area where the horizontal cross section has a radial bulge will cause the wedge at that point to stick out a bit more. These bulges can be as severe as you like. Instead of a bulge, it is easy to make a sharp knife point. This method of defining objects gives you an amazing amount of control. The radial control alone is completely flexible, allowing you to use negative radii, or move the points so that the outside surface actually reverses itself and backtracks. The vertical cross section is equally malleable, allowing you to make self-intersecting walls that are either closed or tube-like. [Or both!] That's it! The user defined vertical and horizontal cross sections completely determine the shape of the object. It is very useful to know how the form is actually constructed- it is not easy to figure out, and the documentation does not describe the method at all. Once you understand how Imagine makes the object, you can actually plan how to build a specific shape. One great advantage to the Forms Editor is the fact that the form is continuous- it is made one piece. This means that making smoothly rounded corners is easy. Organic forms in particular do NOT have sharp right angles and flat planes in them, and are particularly well suited to creation in the Forms Editor. Any object created in the Detail Editor tends to be made of extruded or primitive objects joined together- there is rarely any smooth transition between the joined segments. -------------------------------- Part II- Use of the Forms Editor -------------------------------- The actual creation of these cross-section forms is pretty easy. The Form editor is particularly fast in it's response, since the tri-view does not have as many points to update as the view in the Detail Editor. When you start up the Forms Editor, you have the option of loading in an old form or starting a new one (By choosing "load" or "new" from the Object menu). You have a decision when you make a new object on whether you want an X-Y cross-section or an X-Z cross section. The X-Y option makes your object like the orange- the segments are all arranged around the vertical axis. X-Z orients the object on its side, like a piece of wood on a lathe. (The Form editor can emulate a lathe very easily, but is much, much more versatile.) Most of the time you'll want an X-Y cross-section, but everything works similarly for an X-Z. You also have a choice on how many points and cross sections to add. The "# of slices" is NOT the number of orange segments, but the number of points that defines each orange segment. The "# of points" is the number of orange slices you have. These labels are defined sort of backwards, but if you confuse them it is easy to fix. I feel the default numbers are very large- its easier to start with a simple version of your form and add points later for detail. It is EXTREMELY easy to increase (or decrease) the number of points and segments later, so I usually start with something like 12 points, 8 sections. Again, this is easy to change later. If you start with many points, it takes a considerable amount of time just to move each of the points into your coarse shape before you refine details. The default start up form is that of a sphere with two small holes in it at the top and bottom. The Form Editor does NOT display objects in it's triview like the stage and detail editors do. It shows the vertical cross sections (the orange wedge shapes) in the front and right views, the horizontal cross section (wedge radius as you go around) in the top view. The perspective view is accurate, and you can select wireframe, solid, or shaded mode by using the View menu just like you would in the other Editors. I prefer solid because many forms get very complex very fast, and it is difficult to see the basic structure in the wireframe mode. To manipulate a cross section, you just grab a point and move it to where you want. You can change all FOUR of the vertical cross sections- if you look in the bottom views, each cross section is a separate string of points. If you select a point, it's corresponding points on each of the other cross sections will highlight for comparison. You can define each cross section completely independently- the front view will let you manipulate the cross sections of the orange at 0 degrees and 180 degrees, and the right view will let you set the 90 and 270 degree cross sections. Note that the 4 cross sections are not connected at the top and bottoms. You are free to move the top and bottom away from the center axis. Moving the points so they lie on top of each other on the Z axis will cause the object to close at that point. Moving one or more points away from the axis will cause a hole or entrance to the center of your object to appear. This allows your object to be open at the top and/or bottom, so you could have a tube or bowl instead of a sphere. If two opposing cross sections (like 0 and 180 degrees) touch and the other two do not, you will end up with an object with an intersection in the shape of a bow tie. If you do connect any of the points (you can connect in the middle, too!) you might want to make sure they are EXACTLY on top of each other and then use the Detail Editor MERGE command when you're finally done with design. This will decrease the file size of your form, increase rendering speed, and increase the ability of the Phong shading. Most of the time you don't need to control each individual point, and if you were making a simple object it would be irregular due to slight differences in the cross-sections. The Form Editor has a very useful feature called symmetry that will fix this problem. If you turn on symmetry, whenever you move a point, it's corresponding point(s) will follow and put themselves in the corresponding position. There are five options for symmetry: o None. Every point is completely independent. Default. o Front. The 0 degree points will follow the 180 degree points and vice versa. 90 and 270 are completely independent. o Right. The 90 degree points will follow the 270 degree points and vice versa. 0 and 180 are completely independent. o Both. The 90 degree points will follow the 270 degree points and vice versa. The 0 degree points will follow the 180 degree points and vice versa. Think of it as "oval" symmetry. o 90 Every point will follow the corresponding point in every degree view. Complete radial symmetry. These symmetry options are very easy to use. Note that turning on symmetry does not immediately make the cross sections symmetric- only points you touch and move will change. Most graceful objects have at least one axis of symmetry, many have two, and some have 90 degree symmetry. Note that 90 degree symmetry is actually completely circular. Thus, any swept object (from the Detail editor) can actually be made by using 90 degree symmetry and keeping the radius constant (the top view of the horizontal cross-section). The top view does not have any symmetry controls, and sometimes it would be nice to be able to keep the points somewhat ordered. One way around this is to use "lock" from the select menu. Lock will automatically snap any point you move to the nearest grid location to where you let it go. This is very useful for making straight lines, or for creating symmetric cross sections in the top view. You can also select a bunch of points at once (using the shift key) and use "snap to grid" in the object menu. This makes each point move to the grid location closest to it. You can use the drag box or lasso to help choose what points to select. Grid size is obviously very important when using lock, since it determines the grid intersections. I definitely recommend using grid sizes like 32, 64, and 128. Using 20, 25, 50, 100 certainly seems reasonable until you start dealing with grids like 6.25 or 3.125. The power-of-two grids also work well with zooming, since zoom-in and zoom-out double and halve the screen scale. This is obviously a matter of choice for each user. Some times when dealing with real blueprints or measured objects, different scales are much easier to deal with. There is no question that when you want to build an object in the Forms Editor, you should start simple and work up. Unlike the Detail Editor where adding new (non-modular) details is difficult, adding more polygon resolution is a snap in the Forms Editor. There are actually three modes to the Form Editor. The default is "Edit" which allows you to drag points around to define the cross-sections. However, you can also add new points by selecting "Add" and clicking on CURRENT points. A new point will be added on the line connecting the point you clicked on and one of it's neighbors. You can also position this new point by keeping the mouse button down and dragging the point to its new location. You can edit these new points in Edit mode at any later time. If you add a new radial point (top view) you'll see the point appear at the next (clockwise) segment. If you add a new vertical cross section point, you'll see FOUR points appear, one in each of the four cross section (this is reasonable- the cross sections can't have different numbers of points!) Deletion is done by selecting delete mode and clicking on the unwanted points. Again, 4 points will go away if you select a cross section from the front or right views. It is so simple to add points that defining a new object with a lot of starting points is silly. It is VERY difficult to control that many points, especially in the top view where there you can't use symmetry. It is easier to start off with about 8 points per vertical cross section and around 12 radial sections, and arrange these in a coarse approximation of your object to get general shape and proportions, then add more points for details. Trying to stretch a cross section with a lot of points can be a royal pain. Remember, the plan is to start off with a few points and work up. You'll often find you don't need as many points as you thought to get a well defined object. The example projects all use a few points to define the coarse shape, then add point to make fine details. ------------------ Part III- Examples ------------------ As a final demonstration of how the Form Editor is used, I'll describe three tutorial objects you can make. You are EXTREMELY advised to sit down an make these objects. Reading the tutorial is fine, but moving the mouse around is the best way to learn how to make these sorts of things yourself. There are some screen grabs of some key steps in these tutorials in a file called Form_Tutorial.lzh on hubcap.clemson.edu in the /pub/amiga/incoming/IMAGINE/MISC directory. These screen grabs show the step by step evolution of the examples, as well as a couple of rendered examples. You might want to get these (especially for the last example) but you're welcome to wing it by using the text alone. The file also has a copy of this text in it, so you won't have to separate this mail message out if you're getting it on the mailing list. If you don't know what FTP is, ask a local computer wizard and hope you have access. :-) --------------------------------------------------------------------- A Coke (TM) Can --------------------------------------------------------------------- The Detail Editor has a powerful tool called sweep that can create simple radially symmetric objects like a soda can or a candlestick holder. However, the Forms editor can one-up sweep pretty easily. Our goal is to create an object in the shape of a standard 12 ounce soda can with all the details like the hollow on the bottom and the little metal ridge on the top. The Forms Editor can create objects like this with no trouble, and do it faster and much easier than using the Detail Editor to spin a line outline of the can would take. Enter the Form Editor, and make a new form (in the Object menu) with 4 slices and 20 points. A can at first approximation is just a cylinder. We need many points around the radius to get a nice smooth circle cross-section, but only a few slices to define the rectangular vertical cross-section. For this example, we'll never muck with the 20-point circle cross section. The cylinder is obviously radially symmetric, so we will probably want to turn on 90-degree symmetry from the symmetry pull-down menu. The points that you manipulate in the front and right views will now move their corresponding siblings, keeping the object radially symmetric. To make a quick and dirty cylinder, move each point in the vertical cross sections so that they are on the same Z line- they should stack vertically on top of each other. I like manipulating the right hand cross section in the Front view. Remember, the symmetry mode will move the other three points for you. You can use the perspective view to see what effect you're having on the form. You might look at the screen-grab called can_one to see how the first simple model should look. Again, these screen-grabs have to be downloaded from the FTP site hubcap.clemson.edu. What do we get? Well, our horizontal cross section is unchanged, its still a nice circle. We don't want to muck with it. Our horizontal cross section is a nice straight vertical line. If you think about it, this should give us an object in the form of a tube. If you look at your perspective view and don't see a tube, something is wrong. Look at the can_one picture again to see what the problem is. There are two problems with this tube. First, the sides are a bit wavy, since each point was moved manually and they might not be exactly on the same vertical line. Second, if we really want to make a Coke can, we should at least get the proportions and scale right so we don't have to squash and stretch things later to get it to look reasonable. To fix the wavy line problem, we just use "lock" mode from the select menu. Remember, this will make any point we move jump to grid intersections, so if we move the points around by the same Z line they'll all line up on the same grid line. We should also figure out how to get the right can proportions. If you get out a ruler, you'll find a standard Coke can is 12.2 cm tall and the main body is 3.25 cm in radius. It is difficult to accurately change the radius of our form, but we can make every other measurement use the default radius of 100 Imagine Units as a reference. Hence, there are 3.25 cm in 100 Imagine Units, so the can should be 375 units high. If we change the grid spacing to 25, our can should be fifteen grids high. It is easy to automatically set the height of our object, because the points will leap to the right position when we move them to the correct (coarse) point. You might want to turn on "coordinate" mode from the display menu to help identify where you are moving your points. It might occur to you that we also don't want a tube, we want a solid cylinder, with ends. This is easy to make, we'll just take the top cross section point and move it to the Z axis to enclose the top and move the bottom point to the Z axis to enclose the bottom. This gives us the rectangular cross-section we need to form a cylinder. We'll make our can so that the axis is at the very bottom, at 0, 0, 0, and the can rises to a height of 375 in the Z direction. To actually change our rough tube to this properly proportioned, capped cylinder, set the grid size to 25, turn on lock, and move the top right point in the FRONT view to the 0, 0, 375 grid intersection. The other views should show the corresponding points moving up as well. Move the second point to form the outside top edge of the can, to 100, 0, 375. The third point forms the side, at 100, 0, 0, and the last point will define the bottom, and should go to 0, 0, 0. Your can should look like the picture can_two. Ok, this DOES indeed look like a nice cylinder. So how do we get the nice details like the top rim, and the dent on the bottom, and the narrower "lip ridge" just below the top rim? I said that it was easy to add detail once you had a basic, crude form. Let's make the bottom dent of the can. Turn _off_ lock, so that we can move the points freely to whatever location we want. We want to add come points to the vertical cross sections so we have more control over the shape of the can. Select 'Add' from the mode menu. Now, whenever you click on a point, a new point will appear at the midpoint of the line below it. We want to add a point to the very bottom line segment (Which is currently the horizontal line making the bottom of the can). Just click on the bottom outer point and a new point should appear on the bottom horizontal line. Enter 'Edit' mode from the mode menu, and you'll find this new point is just as easy to manipulate as the originals. To form the bottom dent, we want to move the very last point on our Z centerline UP to make a cavity. The point should be moved about a third of a cm, or 10 units. You might want to turn on 'coordinates' from the display menu to help measure the distance. Once you move the point up, you'll see the dent in the perspective view if you move it so you can view the bottom of the can. The new point that we added can be moved up to make the bottom dent more bowl-like instead of a cone. The trick to adding detail is to identify where you want to add a new feature. If you want to add a new dent or bulge, a new point added at the location you want can be moved in or out to make the feature. If you need to line things up, judicious use of changing the grid size and using 'lock' will let you place the points accurately. Note that the Forms editor LACKS the transformation requester that you find in the Detail Editor, so you can't just type in coordinates for critical points. You have to use grid size and lock to accurately place objects. OK, we know how to add details. Now how do you take the measurements off of the can? There are a few ways- you could judge by eye, you could take a ruler and measure everything, or you can try sneaky tricks. If you fake it by eye, your model is obviously going to be somewhat inaccurate, even if you use a can sitting right next to you as a model. Measuring distances works quite well, though. I used a finely measured rule and a sheet of graph paper to transcribe the shape of all the ridges and bumps. Inputting these coordinates to Imagine involves using the Coordinates display and matching points. However, there is a quick and dirty trick you can use, though this probably isn't applicable to most objects you model. Zoom the front view so that it takes up the whole screen. Center your can in your display by using the "set center" command in the Display menu and clicking at the center of your object. Now, zoom in or out until the size of the outline on your monitor approximates the real size of a Coke can. Take a real can, and press it against your monitor, then eye it. Use the radius as the determining factor, not the height. Now repeatedly use the "set zoom" command from the display menu and muck with the zoom to get the screen can size as close as you can to the real can size when you press it against the monitor. On my 1950 monitor a zoom of 1.05 worked well, but it will vary from monitor to monitor. Once you match sizes, you can actually press the can against the screen with one hand, and move points to match the can outline with the other. [You'll look like a fool if anyone else is around, too!] However silly this seems, I found it the easiest way to input the shape of the can. When I sat with a ruler and some graph paper, my paper diagram turned out to be less accurate as the screen method and took much more time. A rehash on adding the fine details: You have a rough outline. To refine it, just pick the area you want to refine, add a new point on that line, and drag it where you want it. I found that getting a highly accurate cross-section (using 17 points) took less than 3 minutes with the admittedly stupid screen trick. Using a ruler I spent 10 minutes measuring and converting before I even moved the mouse. When you're done, you should have an outline similar to mine, which is shown in the picture can_three. Take a look at your object in the perspective mode with the window zoomed to full screen, and solid display mode on. Rotate the view up and down. Nice, huh? What about the top hole, and the tab? The tab is easy to add in the Detail Editor, by extruding a flat outline. If you expected to make it as an integral part of the can form, I'm sorry to say you were expecting a bit much. The Form Editor likes to make single-piece objects, and you can see how the tab is really a separate part of the can "form." This doesn't prevent you from making a separate tab object and sticking it on, and this is exactly what I did. The hole, on the other hand, is pretty easy to include using the Form Editor! If the hole is facing towards us as if we were going to take a drink, the hole is obviously non-radially symmetric, and it is not front-back symmetric. It IS left-right symmetric. Turn the symmetry from the radial '90-degree' to 'right'. Now, in the FRONT view, move the top point (that is now on the Z axis) straight OUT about a third of the way to the outer radius. This is the WIDTH of the hole on top. In the RIGHT view, move the left-top point (which is the front-top on the can) about 90% of the way to the can rim. Leave the right-top point where it is. The finished can form can be seen in picture can_four. See what we've done? Moving the points away from the center made a hole. We made the front-to-back cross section asymmetric to one side, so the hole location is moved. Look in the perspective view. Play around with moving the hole around and turning symmetry on and off. Why did this make the asymmetric hole? Remember how the form is generated? Each cross-section is interpolated from the 4 defined cross sections. The front cross section blends to the right, which then blends to the back, then to the left, then back to the front. This is very hard to describe, but play with the points and you'll see the kind of control you have. Note that the hole is an oval, which is not quite true for a can. The Forms editor really won't let you do much more unless you want to start mucking with radius modulation, but that's for the next example. This completed can object can object can be loaded into the Detail editor, at which point it becomes a normal object. You can move individual points, apply brush maps, attributes, textures, and manipulate it in any way you would a normal object. After manipulation in the Detail Editor, the objects are generally not reloadable back into the to the Forms editor. Using the Detail editor, you might make and attach the can tab, or move individual points on the top hole to make the ellipse to match a real can's hole more accurately. A final rendered view of a can generated using this tutorial can be seen in the HAM image 'Craftsman', where you can see two separate versions of the can. The carved wood Coke logo was an experiment that turned out well. The Coke logo itself was made with wire cutters, a real can, Digiview, and an hour's touchup in DPaint III. The can could have also been generated in the Detail editor by using the powerful "Sweep" mold function. However, sweep certainly does not provide the interactive updates that the Forms Editor does, and can only make completely symmetric objects. The next examples will show how much more powerful the Form Editor is when it makes very non-lathed objects. --------------------------------------------------------------------- Building a Water Splash --------------------------------------------------------------------- Think of a ball dropping into a pool, and how a corona of water spurts out around it. The splash is vaguely symmetric, and is certainly not a group of primitive cylinders and tori merged together. Building a splash like this using the Forms Editor is obscenely easy, much easier than the Coke can! It is even simple to animate the splash! If we want to make a crude splash model, we should first envision what a cross section of such a splash would look like. The picture splash_one is a 10 second DPaint line drawing of how I see water would splash up and away at the peak of the splash. The center is disturbed but mostly flat, and there is a steep "wall" of water at at certain radius pointing out and up. It curls a bit at the top, with a bulge at the peak, and slopes back IN and down. Outside the wall the water is less disturbed. The wall is the 'shock wave' and is expanding (and falling) with time. It is very, very easy to make a primitive version of this in the forms editor. We pretty obviously want our main axis that our slices are centered around to be vertical. Start a new form, with 30 points and 10 slices, which should give us enough detail to rough something out. Initially, we'll want to make the splash symmetric. Later, we can add asymmetric details, but for now we want the coarse primitive to be radially symmetric, since it will define the basic structure of the form. Use the '90-degree' mode in the Symmetry menu. The initial spherical horizontal cross section is completely useless for our purposes. Pick a height at which you want to base the splash (the bottom point of the cross section is a logical choice) and when you're building the splash, imagine that it is sitting on top of this water. It will give us a good reference point. Pull the top point of the cross section way out and down to the water level. Keep the bottom point in at the center, and also at the water level. The inbetween points should be moved into a crude outline of the sloping water wall that we envisioned. My initial model is shown in the picture splash_two. It took about a minute to build. Look at the perspective view. A bit bland, but it is certainly on the right track. Add a few points to the cross section at the top of the water wave to give it a more complex, bulging appearance. You might want to add some points near the base, especially on the inside, and make the water near the wave a bit more ragged. Now what? Our coarse form was trivial to make, but is far to artificial. Let's jazz it up! Turn OFF symmetry, and muck around with ALL FOUR cross sections. You can increase the height of the wave in one, make the water a little rougher in another, make the peak on one a bit more curved... give them character. DON'T make huge changes like adding a second wave (you're welcome to try!) but certainly make them a bit different from each other. Think of adding a 25% noise level. You might keep an eye on the perspective view, as well- it will show you how the Forms Editor copes with blending these different shapes together. Now what? A little more variation? There's no reason the splash has to be a perfect circle, or even an oval, is there? Of course not. The TOP display shows what the HORIZONTAL cross section of our splash looks like. Right now it's a nice circle. Now, our splash really should be pretty circular when looked from above, but not perfectly... Go ahead and muck with the shape, and again, watch the perspective view to see what happens. You might want to leave SOLID mode on, especially with a fast machine, since the wireframe of such a non-structured object is often very confusing. You can move the radial points any way you like. I suggest that you only move them generally in and out, or the splash will get somewhat lopsided. Also, avoid having sharp spikes. You can see how easy it is to make our splash look like the Statue of Liberty's crown. 2 or 3 point bulges look very nice, major details formed with just 1 point are sharp and look like knives. Not very appropriate for a soft water splash! My final splash is shown in the picture splash_three. A rendered version with three different splashes is called Ocean_Sunset. Ocean_Sunset is actually a still from the current version an anim I'm working on. It has the dolphins jumping around, the water moving with wind-driven waves, and eventually will have a ship slowly steaming along with a nice wake and smoke. The animation of the splashes still need a lot of tweeking, but it's getting better. This is still a work in progress, but it looks nice even now. What about animation? I said it was easy to animate, but how? Well, let's think of what the animation SHOULD look like, then figure how to implement it. How does a splash evolve? The big wall of water starts at the center of the circle and moves outward at a pretty constant speed. It grows in height, curls over, and crashes down as is progresses. If we make maybe 4 or 5 splashes, one for each stage of the splashes growth, we can just move from one to the other. How? Morph! Morph is easy to forget when you're dealing with complex objects like splashes. Since morph requires its objects to have the same structure, different complex objects often won't work with each other. However, if we use the same basic starting form for each of the splashes (same # points and slices) we can have Imagine smoothly interpolate from one form to the next. Considering the fact that creating the splash took maybe 5 minutes, you can see that making an entire animated splash is a 15 minute task. You don't even have to make new splashes, just modify old ones! When animated, you might add frills like separate objects for flying water droplets, and have them follow parabolic arcs. The Form Editor won't let you make detached objects like that, so you'll have to make them as separate objects that fly out, as opposed to pinch off and fly away... You might also use two different splash forms superimposed to give the splash a more complex character. The splash we built is still a bit plain. This example should impress how easy it is to make complex shapes with an amazing amount of speed and control. Asteroid-maker, indeed! --------------------------------------------------------------------- A Complex Boat Hull --------------------------------------------------------------------- Making a boat hull might not seem very easy. If we want to use the Form editor, shouldn't there be some sort of near-radial symmetry? It turns out that you can really push the Forms Editor around in ways Impulse hoped we'd discover. A boat hull is a pretty simple object, right? Well, sorta. If you wanted to build one in the Detail editor, you'd make an outline the shape of an iron (as in for pressing clothes), then you'd extrude it and use slice to make the bottom. Well, this would work, but it's a pretty cheesy boat hull, no matter how good your iron outline was. Even if you were a good modeler, made a series of outlines and used skin to blend them, you are going to get a hull that is boxy as opposed to a nice graceful curve. Think of a big ocean-going vessel, not a cheeseball rowboat. The prow is sharp, to cut into the water, and it angles down and back. The body of the hull is fairly straight, and the stern rounds off smoothly with a flat face as opposed to the prow's sharp point. At no point, however, does the hull look like it was constructed of different sections. To reduce drag, the shape smoothly changes both from the top view (a teardrop with a squashed bottom?) and the side view. It has one axis of symmetry (left/right). How could we ever model this in the Detail Editor? Not easily, and certainly not in one piece. Well, fine. But how could we ever model this in the Forms Editor, either? It certainly is not very obvious. A big hint of how we would design a form for the hull lies in where we place the center, the radial point, of our cross sections. We also have to decide whether the slices should be coming out horizontally (like the axis was a vertical mast) or at right angles. The choice is not obvious. If the axis is horizontal, then the radial sections would tend to form a dome over the hull. If you made the radii of the overhead portion negative (There is no problem doing this!) we could just make a double-thickness of hull. This is messy, but workable. The second option is to use a vertical axis, which gives us the benefit of a simpler object since there is no "dome" to add extra needless points. We want to make a new form object with an XY cross section. Select 3 slices and 7 points and we'll make a very simple version of the hull and work from there. The question is where to but the center of our (vertical) axis. There are three places on the hull where there is a sudden change in cross-section -- the bow, and the two stern corners. If we want to make these changes fairly sudden, we probably want to define each one of them as one of our 4 cross sections. The interpolated cross sections by definition are interpolated, so there's no major change in shape. Thus, we want the bow to be in line with one of the four cross sections, as well as in line with the two stern corners. This makes our choice easy- the only place we can do this is the very back of the boat, along the (port-starboard) centerline. Now that we've decided where to put the axis, how do we want to define the cross sections? Well, we want something that is left-right symmetric, and NOT front-back symmetric, so we should turn on left-right symmetry. We want to change the default nearly-closed spherical cross section to something more resembling an open gravy dish. Move the very top point(s) way out and down some. The front cross section point (the left one in the Right view) should be moved the most. The back cross section point should be moved down, but not out very much. Remember that the stern is very close to the axis, and does not have much detail. The Front view should look somewhat like a big "U", and the Right view should look like a sideways stretched "U" with one end (the bow) sloping back and the other pretty vertical. The horizontal cross section (top view) should look (reasonably) like a boat viewed from above. The front should be pointed, the back should be fairly blunt, but rounding off to the sides. Describing the shape of these forms is harder than describing a Coke can. Look at the picture hull_one to see what my crude shape looks like. You can see in the perspective view that this basic form has a little hull-like character. It is sharp in front, and has a blunt rear. You can add extra points to each of the views to make a smoother form with more details. My final boat hull is shown in picture hull_two. To get an idea of how complex the real object is, there is a picture of the same hull shown in the detail editor in picture hull_three. ----------- The last example is much shorter than the rest, because there is little more to say about the Forms Editor. What is does is very complex, but there are few sneaky tricks once you learn how to control the shape of your objects. The best way to become proficient with the forms editor is to practice! I challenge you to build a banana. Or a light bulb WITH threads! [It's quite possible, though annoying]. How about a good pencil object with six sides? This wraps up the tutorial on using the Forms Editor. Sometime in the next month or so I'll be writing a similar (though probably even longer!) tutorial on the using the Detail Editor and another on the general process of object design and creation. -Steve Worley 5/28/91 --------------------------------------------------------------------------- Steven Worley spworley@athena.mit.edu --------------------------------------------------------------------------- Because I was erked when my brush and texture tutorials were posted on Compuserve sans credit, I include the following: The text contained within this document as well as the associated computer files are (C) Copyright 1991 by Steven P. Worley. They be distributed freely under the following conditions: 1) The entire text, including this copyright notice, is kept entire and 2) Steven Worley is duly credited as being the author. The author reserves all other rights to this text. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ APPENDIX C: VIDEOTAPE i) dumping to videotape ii) comments on dumping to videotape iii) more comments on dumping to videotape +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ i) VIDEOTAPE- dumping to videotape, by Steve Worley: Ian Lichter mailed me personally about dumping to videotape. There are three avenues you can take. If you have a 24 bit display and want to record the image in its professional glory, you're going to need a single frame video tape recorder, (about $2500!) and a transport controller to control it. ( I get the feeling these run like $300, but I don't know). I don't know the details- I don't know anyone who has actually done this. A second, easier and cheaper solution is to use a product like DCTV, which animates and outputs direct NTSC which can be plugged right into your standard VCR. The quality is way lower than 24-bit, but the quality is also way higher than standard Amiga output. If you don't have a DCTV, you can dump standard Amiga output to video using a genlock. This is a device that overlays Amiga graphics on video, but it can be used to dump JUST the amiga graphics. The Video Toaster will do this, as well as any genlock. I've never used one, but I've read several good reviews of the $190 Minigen, and several bad reviews of the $99 Amigen. What do I use? I havn't had the $$$ for a genlock, so I have a piece of hardware called an encoder- it just converts Amiga RGB to composite video. In fact, you might really want to pick one of these up- I have an A520 "RF Modulator for the Amiga 500", which I bought new for $35. It does a superior job at encoding- as good as any genlock or the Toaster. [A friend with a Toaster was in a huff until we compared videotapes. Couldn't tell the difference, both were excellent.] Don't let the name fool you- the A520 outputs both RF (for direct plug-in to a TV) and composite (I feed this to my VCR). It also works on any Amiga (I have a 3000). It plugs into the RGB port, though it does NOT have a pass-through for a monitor. The A520 is definitely the cheapest way to go if you just want to dump Amiga animation. Something to look for is Colorburst, which MIGHT be able to do really impressive color animation. [Nobody's seen this wonderful stuff yet, so its still vapor.] It outputs RGB, which would have to be encoded by an external genlock (or an A520) before being able to be saved on videotape. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ii) VIDEOTAPE- more comments, by Scott Sutherland: Just to clarify, the DCTV hardware itself does not animate (I am sure that all of you realize that, but (as they say about winning the Florida lottery) 'Ya Never Know'!). What it can do is to 'decode' images with the special DCTV color information in them as they are played back using the standard RAM animation techniques (ANIMS ;^)). It DOES look really nice. The HAM-E will do this as well. On Genlocking devices... Steve Worley writes: >I've never used one, but I've read several good >reviews of the $190 Minigen, and several bad reviews of the $99 Amigen. I read many articles on genlocking devices for the Amiga, including some very technical ones which analyzed their output with professional equipment (way out of my field) including a vector scope, all of which panned the Amigen. Well, I was using a CMI VI-500RF (now DigiFEX, I think) encoder, similar to the A520, for dumping my video to tape (it also has a really nice output and can easily be converted to work with SVHS as well). I had wanted to play around with genlocking video and graphics, so when I got a chance to buy a used Amigen for $50, I did it, despite the BAD reviews. I have played around with it, as mentioned in one of my previous postings, and the quality is surprisingly good. At least for my HOBBY work. The colors look nice and bleeding is not too bad. It IS hard to read text (same for my encoder), but that is to be expected. I understand that where the poor output of the Amigen will hurt me will be if I do multi-generational dubbing and/or copying. But by then the VHS quality will not be to great either. For JUST putting TITLES on videos or simple one-pass video/graphics interactions, the AMIGEN will work just fine. If you see one used and want to play around with genlocking (I highly recommend it. It's GREAT FUN and can really get the creative juices flowing!!!), I recommend it. If you are doing anything that will be BROADCAST or even dubbed/edited into a final copy and your final generation will be third or so, the Amigen will probably fail miserably (my guess is that this is true for the Minigen and Progen as well). However, when doing this type of editing, you will probably be doing SVHS anyway, so that might help. BROADCAST quality IS OUT, though. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ iii) VIDEOTAPE- still more comments, by Mark Thompson: Steve Worley writes: > If you have a 24 bit display and want to record the > image in its professional glory, you're going to need a single frame video > tape recorder, (about $2500!) and a transport controller to control it. ( > I get the feeling these run like $300, but I don't know). Actually, animation controllers run from about $1500 to $6000. However, the soon to be released JVC S-VHS VCR will do single frame recording without one (the first of its kind). It should sell for about $2200. Also, recordable video disk units do not require a transport controller. > A second, easier and cheaper solution is to use a product like DCTV, which > animates and outputs direct NTSC which can be plugged right into your > standard VCR. The quality is way lower than 24-bit, but the quality is > also way higher than standard Amiga output. I was doing this over the weekend. In 3bit mode I got about 15 fps and some fairly high contouring (banding). In 4bit mode, image quality was much better (though contouring was still evident) but my frame rate dropped dramatically, maybe 5 to 7 fps. I was using PageFlipper F/X on a 2500/30 with 640 x 400 images. I might note that these were camera "flybys" through a city scape at up to 105 miles/hour so there was a good sized delta from image to image. The 60 frame animation was over 5meg in 4bit mode and about 3.3meg in 3bit. Anyway, one thing to note about DCTV images converted from 24 bit renderings, both 3 and 4 bit modes exhibit a fair amount of rainbowing. Any area that is too "hot" (too much color bandwidth) will show a rainbow of colors. DCTV includes a filter to reduce this effect (at the cost of sharpness). > I have an A520 "RF Modulator for the Amiga 500". It does a superior > job at encoding- as good as any genlock or the Toaster. A friend with > a Toaster was in a huff until we compared videotapes. Couldn't tell > the difference, both were excellent. You will probably not notice much difference on a low quality VHS unit. But believe me, when viewed with high quality video equipment (D2, U-matic SP, recordable laser disk, etc.) there is no comparison. In video, one rule *generally* holds true, "you get what you pay for". +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ APPENDIX D: CENTAUR TAPE: i) review ii) second review +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ i) Centaur Tape Comments, by Richard Nollman: I believe that this IS NOT the tape offered in the Impulse newsletter. I talked with Steve Worley last night who is in frequent contact with Rick and asked the same question. He said that as far as he knows it is not. I thin k Steve said something about it not being finished (not sure about this). But the best person to ask of course (or second best) is Steve. I am sure he will post something about this. I met the guy who did the Centaur Imagine tape. He was stapling the plastic bags of people going into the Creative Computers booth (large Amiga mail order house) at the AmigaWorld Expo in NY last weekend so that people would not steal things. Pretty crude I thought. Anyway, I went to the Centaur booth to see the tape before I bought it, and their machine was broken. The person in the booth suggested that I talk to the person who made the tape, took me over the the bag stapler, and introduced me. I questioned him for about 10 minutes or so (which was very difficult -- Creative Computers was very busy and every 10 seconds or so a new crowd of people would need to be stapled before they entered the booth). Anyway, I described the initial problems I had with the manuals, the help I received from the Imagine mailing list, and a friend who spent quite a bit of time working through the various editors with me. I told him that I was creating simple animations with spheres moving and camera moving and doing chrome and reflectivity etc. He said honestly that he felt that at that point I was beyond the tutorial. It really was designed for people who could not use the manual to get started. He said that it did not really get into much depth on setting attributes and things at that level. So fortunately I did not spend the money. I met a poor soul who had some very nice Imagine renderings that were being displayed at the Black Belt booth who had bought the tape (very excited about it). We had a great discussion about Imagine and ray-tracing. He seemed very advanced. I am sure he was pissed when he played the tape...I hope he can get his money back... +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ii) Second Review of Centaur Tape, by Mark D. Manes: Warning Will Robinson... Danger, Warning! Folks, I recently checked out the new Imagine video tape from Centaur Software... in a word, I think it, well, sucked. I hate to use words that strong, but the narration was terrible. I felt as though I was hearing stream of thought rather than a nice presentation of the Imagine program. Further after watching the nearly 90 minute tutorial (yawn) the creation that I suffered 90 minutes to see was ugly to bone. The tutorial seems to be disjointed and does not explore the detail editor with any depth. Further it breezes through the description of adding faces to an object without ever really showing you how to do it. I about died when I watched the section on the attributes requestor, the tape said things like the filter gadget adjusts the filter settings! Great, I could not have guessed that. :-) I _have_ created many interesting pictures just from following the tutorials in the Imagine manual! This tape would be great if they had simply recreated the tutorials that are in the manual, instead of taking me on a disjointed chaotic trip through Imagine. This tape should be avoided at all costs. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ APPENDIX E: SURFACE MASTER i) Advertisement ii) Review 1 iii) Review 2 iv) Additional Details +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ i) (I uploaded this from People/Link a couple of days ago - Mark Davis.) Introducing "Surface Master" for IMAGINE by Louis Markoya. A comprehensive collection of Attribute and Texture settings which allows you to master your renderings and achieve professional results. The Surface Master package comes with a detailed manual explaining all Attribute and Texture parameters, effects and how to animate those effects plus hints and tips on special applications. A disk containing IFF pictures illustrates each Attribute and Texture setting. All objects and many attribute files are included. Attributes for many surface qualities like Chrome, Glass, Gold, Brass, Diamond, Emerald, etc., are included and explained. Proper Index's of Refraction and custom settings are used for the best results in different Global situations. In addition to these, many other preset examples explore the realm of possibilities within IMAGINE. Texture variables will be explained as well, with a wide array of each Texture's possibilities presented. For Example, Wood, has a matrix of settings to explore all of its parameters, and seperate settings for Pine, Oak, Zebrawood etc.. Pictures illustrate the wide array of all effects possible. The actual objects rendered are included. Settings and the discussion of their variation are covered in the manual. Textures can be animated and hints for the best settings are offered. The effects of moving the axis and the interaction of object size to Texture settings are explained. Surface Master is of great value to both the novice and pro, eliminating the struggle to achieve those special results. Those knowledgeable of his work are fully aware of his abilities, especially in Turbo Silver and IMAGINE. Now he shares many of his "secrets". The Surface Master package is available for $30.00 only through direct mail from Louis. Send Bank Check or Money Order to;* Surface Master Computer Imagery 49 Walnut Ave. Shelton, CT 06484 Make checks payable to Louis Markoya * Personal checks accepted, but shipment will be delayed for check clearance. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ii) Review of Surface Master, by Richard Nollman: I received my copy of Surface Master on Monday and within minutes it paid for itself in time saved and frustration avoided. Unless you are a master Turbo and/or Imagine user, this program will save you hours (days, months, years?) of experimentation. For those of you who might not have read the initial advertisement posted last week, Surface Master is described as "a comprehensive collection of Attribute and Texture settings which allows you to master your renderings and achieve professional results." The software makes good on the promise. I am a novice 3D modeling, Imagine, and Amiga user (bought my 3000 at the end of October). Within ten minutes I created an animation with a gorgeous wood grain chesspiece and four reflective spheres with varying reflection values on a blue highly reflective plane. I have been concentrating my time on just learning how to set the basic attributes (to do things like glass, chrome, etc). I thought that things like texture mapping would have to wait. Well, I loaded up Surface Master, wrote down the values for the wood texture of a Surface Master object (textures, unlike attributes, cannot be loaded directly because they are not saved in the same way) and applied these values to my chesspiece. I was astounded at the quality of the rendered image. The first thing that struck me was the prompt arrival of the software. I sent in a money order last week and received my copy on Monday. The software has a simple program that consists of two levels of menus. The first contains a matrix of windows with attributes and textures that correspond to the ones found in the Imagine Attribute requestor. Click on an attribute or texture and next level menu appears with 4 sets of 4 objects (spheres or cubes) rendered with various settings for that attribute or texture. Sometimes a window will have several attributes described. Each object has a value assigned to it (R,G,and B values or a single value) that you can write down on paper. In most cases you do not have to; the objects that appear in the Surface Master menus come in Surface Master directories. When you are working in Imagine, simply load in the object or the attribute from the Surface Master directory. Markoya used them to create the Menu screens. To get the texture values, load in the objects with the texture values you want, invoke the Attribute requestor for the object, choose texture, and write down the values. Just one texture, wood, is worth the price of the package. Surface Master includes 16 different samples of wood grain combined with linear, random and radiance(?). In addition, there are 16 samples of different types of wood (mahogony, ash, pine, oak, zebrawood, etc.). In a few minutes, without having to puzzle over Imagine documentation (which usually ends up providing little or no help), I understood how to use the linear texture to create my wooden chesspiece. For the color attribute, Surface Master includes a color wheel of spheres. Load these spheres individually as objects to your rendering project or the attributes associated with them. Very helpful in getting just the right color for an object without having to diddle around (or at least get a close approximation). Color and wood are only a few examples. Finally, the documentation. The manual is very small, but clearly and thoroughly presented. Each attribute and texture is described in detail. Impulse could learn alot about documentation from this manual. It packed so much information in such a small space that I need to go back and read it several times to really get the meat of it (mostly I was just eager to try out the software). From many it will probably become a standard text on Imagine attributes and textures. And all for just $30. Amazing... My hats off to Louis Markoya. I hope that he is going to continue to enhance Surface Master. I would love to see a disk of objects and other attributes. Maybe an entire disk concentrating on reflection or chrome. If he has more Imagine-related software coming out, put me on the top of the list. I do have one complaint. It comes with what appears to be a projector program. But it is not documented and I cannot figure out how it works. If anyone knows how to contact Louis, please pass this on. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ iii) Review of Surface Master, by Harv Laser: To explain this a little further, Surface Master is made up of a full disk of some different parts: -There's a Projector (tm Right Answers Grouop) sequence of screen shots showing all the various attributes and textures available on the disk, such as a screen full of wood spheres of different kinds of woods. I don't remember offhand how many screen shots but at least a dozen. -There's a directory full of objects from which all those screen shots were made. Say you wanted to use Zebra wood on one of your objects in a rendering. You'd load the zebra wood object (which you could see in the slide show) into Imagne, select it and then select the attributes requester, jot down the wood settings, then select your own object and punch in those same settings to get that same wood. -There's a directory full of attribute settings for which you do not need to load in Louis' objects nor copy down any settings. These attributes can be loaded directly into the attribute requester and applied directly to your own object - without interfacing at all with the "textures" that come with Imagine. Stainless Steel, Chrome, Emerald, Diamond, etc. would be examples of attributes which can be loaded in right from disk without textures, whereas Woods, Dots, Grids, Checks and other texture effects require the extra step of loading in Louis' object and copying down and then re-entering the textures for your own objects. The beauty of this disk is that Louis has done all the hard work. You don't have to sit there trying to figure out how to make something look like chrome or like ivory. All the settings are on the disk in one of the two forms described above along with pictures of them all. So it's a lot more than just a disk full of pretty pictures or numbers painted on the screen. disclaimer: Louis Markoya is a friend of mine and he's marketing this product on his own and I just want people to know that it exists. I get no "cut" from the money he makes from it. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ iv) Details, from Richard Nollman: In response to a request to post the attributes and textures covered in the Surface Master software, I post the following: Spheres and cubes are rendered in color on menu screens (very nice) with libraries of objects, attributes and textures included in the package. Each of the following categories displayed on a submenu screen: Reflect/Filter 4 x 4 matrix of spheres with RGB and intensity values Dithering/Roughness 2 x 4 matrix of spheres with intensity values (50-225) Specular/Hardness 2 x 4 matrix of spheres with intensity values (50-225) Color 49 colored spheres in a color wheel;9 spheres in grayscale Shininess 3 x 4 matrix of spheres with shininess, filter, and index of refraction values Index of Refraction 3 x 3 matrix of spheres with intensity values (1-3.4) Linear/Radial (textures) 4 x 3 matrix of spheres with transition width and reflect/filter RGB values Checks/Angular (textures) 4 x 3 matrix of spheres with angular, checksize, and reflect/filter RGB values Grid/Dots (textures) 4 x 4 matrix of cubes with gridsize, reflect/filter RGB, and dot spacing values Bricks (texture) 4 x 4 matrix of cubes with XYZ shift, Y shift with Z value, Z shift with Y value, and reflect/filter RGB values. Disturbed (texture) 4 x 4 matrix of spheres with amount, wavelength, X separation, and small values Wood (texture) 4 x 4 matrix of spheres with ring spacing, exponent, variation and random seed values Preset Materials 4 jewels (diamond, ruby, saphire, and emerald) and 12 spheres (glass, crystal, water, quartz, steel, pewter, plastic, ivory, chrome, gold, brass, and copper) Woods 12 spheres with the following types of wood: birch, mahogany, cherry oak, pine, red cedar, zebra wood, red mahogany, black walnut, ash walnut and tulip (? - can't read my own writing) Combos 16 cube assortment demonstrating mixed textures including: wood/grid, grid/wood, linear/disturb, bricks/linear, bricks/wood, and bricks/linear That's the list. Have fun with it (I sure am). Just want to mention that I do not even know Louis Markoya so I am just posting this as a satisfied customer. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ APPENDIX F: TTDDD (an excellent shareware package). i) getting coordinates with TTDDD. ii) making threads. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ i) Coordinates, by Glenn Lewis: Doug> First and foremost.... how can one get the coordinates out of Doug> Imagine for the points without going to each one and writing down Doug> the coordinates? Piece of cake. Get TTDDD.zoo from ab20.larc.nasa.gov (I think it is in the incoming/amiga directory). Type: "ReadTDDD Enterprise.object > Enterprise.ttddd" Now take a look at "Enterprise.ttddd", and it's got all the information you need, I believe. Scott mentions some commercial package that does the same thing. TTDDD, like Scott's, works on Turbo Silver objects, but it can read Imagine objects, and will simply skip the IFF "chunks" that it doesn't understand (and will tell you what ones they are). Whenever I get the Imagine IFF format specification, I plan on upgrading the TTDDD package. Disclaimer: TTDDD is ShareWare, written by myself. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ii) THREADS, by Glenn Lewis: >>>>> On Mon, 25 Mar 91 20:58:40 EST, spworley@ATHENA.MIT.EDU said: Steve> Anyone have any good ideas on how to make threads, like on a Steve> bolt? Sure. Piece of cake. In the last twenty minutes, I cooked up a little Perl script that creates a threaded object whose parameters I can control. I used, of course, WriteTDDD. In fact, here is what I typed: thread 60 0.5 10 4 5 | WriteTDDD > thread.tddd Here is the Usage information: Usage: thread NUMPTS SPACING HEIGHT IN_RADIUS OUT_RADIUS where NUMPTS is the number of point in a single revolution SPACING is the number of units between threads HEIGHT is the total height of the bolt. IN_RADIUS is the radius of the inner thread. OUT_RADIUS is the radius of the outer thread. Does this sound like something you would want, Steve? Unfortunately, I don't have my Amiga with me right here, so I can not see if it looks like what you want. So I'll send you the object, Steve, and let you take a look at it. Nevertheless, here is the Perl script that I used to create it. If anybody doesn't know what TTDDD is, you can grab it off of ab20.larc.nasa.gov and it will give you more information. It stands for "Textual Three Dimension Data Description", and was written by me. Have fun. -- Glenn Lewis ******************************************************************************** #!/usr/local/mcfg/bin/perl if ($#ARGV < 4) { print STDERR "Usage: $0 NUMPTS SPACING HEIGHT IN_RADIUS OUT_RADIUS\n"; print STDERR "where NUMPTS is the number of point in a single revolution\n"; print STDERR " SPACING is the number of units between threads\n"; print STDERR " HEIGHT is the total height of the bolt.\n"; print STDERR " IN_RADIUS is the radius of the inner thread.\n"; print STDERR " OUT_RADIUS is the radius of the outer thread.\n"; exit(0); } print "/* thread.ttddd - Written by Glenn M. Lewis - 3/26/91\ * Steve Worley had asked on the Imagine mailing list how to create\ * a thread-like object for Imagine. Instead of saying 'how about\ * using TTDDD to create it, I thought... I'll see if I can create\ * a thread using TTDDD. Since my Amiga isn't handy, I'll let somebody\ * else pump this through WriteTDDD to get an object and check it out.\ */\ \ OBJ Begin\ DESC Begin\ NAME \"Thread\"\ SHAP Shape 2\ SHAP Lamp 0\ "; # OK. Start calculating the position of the points, edges, and faces... $NUMPTS = $ARGV[0]; $SPACING = $ARGV[1]; $HEIGHT = $ARGV[2]; $IN_RADIUS = $ARGV[3]; $OUT_RADIUS = $ARGV[4]; $PI=3.14159265; # # Calculate the points needed... # $height = 0.0; $heightstep = $SPACING/$NUMPTS; $theta = 0.0; $thetastep = $PI/$NUMPTS; $count = 0; while ($height < $HEIGHT) { $outer_x[$count] = sin($theta) * $OUT_RADIUS; $outer_y[$count] = cos($theta) * $OUT_RADIUS; $outer_z[$count] = $height; $theta += $thetastep; $inner_x[$count] = sin($theta) * $IN_RADIUS; $inner_y[$count] = cos($theta) * $IN_RADIUS; $inner_z[$count] = $height; $theta += $thetastep; $count++; $height += $heightstep; } # # Start writing the TTDDD data... # # First, list the points... # printf(" PNTS Pcount %d\n", $count*2); $edge = 0; for ($i=0; $i<$count; $i++) { printf(" PNTS Point %d %g %g %g\n", $i*2, $outer_x[$i], $outer_y[$i], $outer_z[$i]); printf(" PNTS Point %d %g %g %g\n", $i*2+1, $inner_x[$i], $inner_y[$i], $inner_z[$i]); # Count up the number of edges we need if ($i<$count-1) { $edge += 3; # O[i]..O[i+1]..I[i]..O[i] if ($i>=$NUMPTS) { $edge += 3; } # I[i]..I[i+1]..O[i-N]..I[i] if ($i+1<$count) { $edge += 3; } # O[i+1]..I[i+1]..I[i]..O[i+1] if ($i>=$NUMPTS) { $edge += 3; } # I[i+1]..O[i+1-N]..O[i-N]..I[i+1] } } # # Second, list the edges... # printf("\n EDGE ECount %d\n", $edge); $e=0; $face = 0; for ($i=0; $i<$count-1; $i++) { printf(" EDGE Edge %d %d %d\n", $e++, $i*2, ($i+1)*2); printf(" EDGE Edge %d %d %d\n", $e++, ($i+1)*2, $i*2+1); printf(" EDGE Edge %d %d %d\n", $e++, $i*2+1, $i*2); $face++; if ($i>=$NUMPTS) { printf(" EDGE Edge %d %d %d\n", $e++, $i*2+1, ($i+1)*2+1); printf(" EDGE Edge %d %d %d\n", $e++, ($i+1)*2+1, ($i-$NUMPTS)*2); printf(" EDGE Edge %d %d %d\n", $e++, ($i-$NUMPTS)*2, $i*2+1); $face++; } if ($i+1<$count) { printf(" EDGE Edge %d %d %d\n", $e++, ($i+1)*2, ($i+1)*2+1); printf(" EDGE Edge %d %d %d\n", $e++, ($i+1)*2+1, $i*2+1); printf(" EDGE Edge %d %d %d\n", $e++, $i*2+1, ($i+1)*2); $face++; } if ($i>=$NUMPTS) { printf(" EDGE Edge %d %d %d\n", $e++, ($i+1)*2+1, ($i+1-$NUMPTS)*2); printf(" EDGE Edge %d %d %d\n",$e++,($i+1-$NUMPTS)*2,($i-$NUMPTS)*2); printf(" EDGE Edge %d %d %d\n", $e++, ($i-$NUMPTS)*2, ($i+1)*2+1); $face++; } } # # Third, list the faces... # printf("\n FACE Tcount %d\n", $face); $e=0; $f=0; for ($i=0; $i<$count-1; $i++) { printf(" FACE Connect %d %d %d %d\n", $f++, $e++, $e++, $e++); if ($i>=$NUMPTS) { printf(" FACE Connect %d %d %d %d\n", $f++, $e++, $e++, $e++); } if ($i+1<$count) { printf(" FACE Connect %d %d %d %d\n", $f++, $e++, $e++, $e++); } if ($i>=$NUMPTS) { printf(" FACE Connect %d %d %d %d\n", $f++, $e++, $e++, $e++); } } # # Now wrap up the object description... # print "\nEnd DESC\nTOBJ\nEnd OBJ\n"; exit(0); +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ APPENDIX G: WAY COOL PROJECTS i) extruding picture ii) rolling sphere iii) 3-D font +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ i) Way cool project 1, by Steve Worley: This was way-cool! Try it. Get an object. A sphere will do, but whatever you want. FLAT map a brush onto it. Make sure the brush Y axis is bigger than the object, make sure the object just fits in the positive x positive z quadrant. Go to "transform axis" in the brush requestor, select "size", then write down the x & z scalings. Make a plane. Map the same brush on it. Use transform to get the same size. make sure the plane's size is at least as large as the brush. Go to the stage editor. Put the object DIRECTLY behind the plane. Orientation and position are critical- you want the brush maps to line up. [They're the same size.]. Put the camera on a 45 degree view so you don't have a dead on shot. Make a path that moves the object straight THROUGH the plane, for about 20 frames. Animate it! Here's what you'll see. You'll see a flat picture slowly take on a three-d form, "extruding" exself into a third dimension. The join between plane and object is indetectable because the brush maps are identical. This effect is REALLY cool, though you have to be careful to line everything up right. Use "transform" to set position and orientation of the objects and their maps exactly if you're having trouble. You can render this in scanline- it doesn't need trace. You could make a room with a framed picture (I have a REALLY nice picture frame) with a picture of something on it. Camera moves to an oblique view, zooms in a little, picture starts "extruding." Maybe out a little, then back, then out then back, then finally, the object finally makes it all the way out (and the picture behind has a new brush map without the object!). Then the released thing (whatever!) could explore the "Real World". An idea. Run with it if you like, post how it goes. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ii) Way cool project two, by Steve Worley: I've been working on an animation that seems to be coming out very nicely- there's a couple of techniques dealing with brushes that people might find very useful. I created a still first. It started as a "mirrored balls on a checkerboard" setup, with the centerpiece being a big, black, glossy sphere with a picture of me "trapped" inside the sphere. Later I turned it into an animation with the camera moving about so that you could see the different sides. It looked cool- the real goal was to see how well a "traditional" mirror & glass sphere populated plain would look. It turned out so well that I changed the animation to a still camera and having the ball roll around the scene, in front of mirror-balls and in back of glass balls to see the neat effects. [Remember the long transparency essay I wrote? I was tweaking the crystal spheres for this anim.] Making the ball roll was a trick. How do you get something to roll (at the right speed!) while following a path? Getting it to spin (like a plane doing a barrel roll) is easy- you align to path, then set Y rotation to be from 0 to 360 and it will do a complete spin. This is not in the right direction for a rolling ball, though. [Annoying feature- you can't say from 0 to 720 for two spins, or 0 to 3600 for ten.] To get it to roll I created a second path, which was basically a larger copy of the first, so the first path was just inside of the second path. I had an axis (a track) follow this new, outside path, then used "align to object" to make the sphere point to the axis. Thus, as the ball moved along its path, one end (the positive Y axis direction) was always pointed at right angles to the direction of motion. Is this clear? Now using the "initial Y angle" and "final Y angle" I set them to 0 and 360 and it rotated as it rolled. As a special effect, I raised the "track path" a little in the Z direction so the sphere looks a little bit like a top rolling around, since the spin axis was not horizontal anymore. An alternative would be to make a cycle object, rolling around the X axis. This is equally valid, but I did it this way first. The picture of me on the sphere was pretty easy. I used Digi-View to take a picture of me with a scared/concerned expression and my hands palm forward outstretched a little. I stood in front of a clean, white background. I saved the pic as an IFF24 picture from Digi- View, and used The Art Department to balance it. Digi-view's balancing controls are fine- TAD has a couple of nice features, though, like scaling and especially gamma correction, which increases contrast by expanding color scales. (I'll explain if someone wants me to.) I saved the pic as a 900x600 16 color IFF, then loaded it into Deluxe Paint III. Deluxe Paint is a wonderful program, and has no objection to loading large IFFs. I touched up a couple scanning artifacts with the smooth and blend tools, then removed the background. To do this, I first used the filled rectangle tool to fill in the big, easy to clear spots of background (a wall in my case). I then used the stencil (frisket to you Disney folks) to let only the brightest few whites be changable. A pass or two with a big brush along the edge of my body, and woosh- the background was gone. I then added a new background ( a grid of white lines) by picking my body up as a brush and stamping it on a grid I made on the spare page. I saved the picture, and I was done! Imagine does not care what size the picture it maps is- they all get normalized to the brush-axis dimension. Thus, my LARGE picture was of significantly better quality than just a screenful. Optimally, if I had a 24 bit paint program, like the Firecracker paint program, Colorburst's paint program, or Toasterpaint, this would have given the highest quality output. Anyone want to give me a Colorburst? Wrapping is an art, and everyone should read Mike Halvorson's brush-wrapping posted about 2 weeks ago. Its pretty good, though he mis-describes Y axis functionality in wrap-wraps, but not in flat-flats (though maybe I'm wrong). Luckily, wrapping spheres is a snap- you can't screw up as long as your brush's Y axis is smaller than the radius, and the axis is centered. Complex shapes are much more difficult, and best described in another post sometime. [Like after I can do them consistantly!] Anyway, the result mapped onto the sphere looks real cool. The grid wraps around the sphere like longitude/latitude lines, and I was smart and made my grid match up from one side to the other. This made the join on the back of the sphere look UTTERLY undetectable, so it isn't obvious this is a flat object wrapped onto a curve. I rendered this 80 frame anim over about 6 days, (hires raytrace) and it was beautiful! The glass in particular looked sleek. I then wanted to spiff it up even more, so I added a glass arch (half a stretched torus) for the prison-sphere to roll though, and I animated myself on the sphere. How did I animate myself on the sphere?? This is a VERY useful trick, and I learned it long before I had Imagine, when I was into DPaint anims. What I did was I took a camera and VIDEOTAPED myself kinda waving my hands around like a mime (the invisible wall in front of me, palms outward) with the concerned/scared look on my face. After a few takes, I thought I had the right feel, so I booted my 3000 [well, sat down in front of it- its always on!] and started Digiview. Time out: IMPORTANT! Digiview DOES work on a 3000- you must use 'CPU nocache noburst' before you start Digiview, or it will die! I almost sold my DV until I said "hmm. I'll try one more time. What if I .." and it worked. Anyway, I played the tape and freeze-framed on the start of the part I liked. YOU CAN'T USE A CHEESY 2-HEAD VCR! You need good stills.I digitized a frame, then spent a good 10 minutes perfecting the balances. [I didn't use TAD because it would have been a pain saving all the frames (1/2 meg each!) and loading/balancing/saving them again. ADPro has an AREXX interface, and so does Digi-view. This would have been an IDEAL application of AREXX!] Once I had the balance perfected, I re-digitized, balanced, and saved the picture as 'steve001'. The 001 is important- if you save it as 'steve1' it will be a bit harder to load into DPAINT. [You'll see!] I then forwarded 3 frames, and digitized, and saved as 'steve002'. I did this for 40 frames. Yes, its mind-numbing, but really only takes half an hour, and you can be listening to tunes or talking on the phone or whatever. Finally, I started DPaint, and blessed my extra RAM. I went into 'load picture', selected file 'steve001' and at the bottom of the name requester, entered '40 frames'. Dpaint then loaded the next 40 frames (alphabetically) as an anim. See why we have steve001? It loads steve001 to steve0040 correctly. If I used 'steve1' the order would be steve1,steve10, steve11, ... steve19, steve2, steve20 and so on. OK, I have an anim. I play it, and voila! There I am, looking like a person acting like he's trapped in a sphere! :-) The quality of this method is SURPRISINGLY good. Try it- even if you don't use Imagine. It's lots of fun! 320 by 400 animates faster if you're not doing it for Imagine, but just want to muck around. [well worth it!] Here's an idea- tape yourself throwing and catching a volleyball, then digitize your best friend. Remove his or her head as a brush, then paste a copy of the head on top of the ball in every frame of your anim. Voila! Macabre juggling! Works really well if they're smiling. Back to the Imagine anim. I digitized in hi-res for quality- it doesn't animate as well in DPaint (more bandwith -> slower anims) but for our purposes this makes no difference at all. I cleaned out the background for all the frames by using "anim-painting"- holding down the left-amiga as you paint. [3000 owners, you might have to change the WB prefs- this is the default way to drag screens] By using big brushes for the easy stuff, then stencils, a smaller brush, and a much slower pace for the edges near my body, I removed the background from all the frames. I picked up my body as an animbrush, then anim-painted onto a 40 frame anim of a stationary grid. I then used "save picture" [NOT anim!] and saved 40 frames as stevebg.. DPaint is smart, and makes stevebg001, stevebg002,... and so on. Now what? To Imagine! I call up my project, which currently has a static brush on the sphere. If I were starting from scratch, I would render the anim in HAM scanline to insure the pacement of the brush and feel of the anim. Once you animate the brush, it is not a trivial matter to change its position on the object you're wrapping. However, I have already done a static test. I know that my brush is in a good position- I'm upright and centered just as I pass the camera- a good shot. I then went into the detail editor and loaded sphere.iob [my _I_magine _OB_ject] and entered the attributes selector, and select the brush map already there. I changed the picture filename in the gadget to say 'stevebg.001' and exited and saved the object as sphere001.iob. I then went back to the brush name, changed it to 'stevebg002' and saved the sphere as sphere002.iob. Note there is no need to RELOAD the sphere- I just save it. This goes by VERY fast once you get started, and I had 40 objects in 5 minutes. Also, every sphere has the same attributes and same brush position, etc. The only thing to change is the name of the brushmap. To the stage editor! I already had my rolling sphere set up- remember, I did a static version before that looked good. I deleted the "actor" that was my sphere, keeping the position and alignment that were already there. I then added a new actor from frame 1 to frame 1 called sphere001.iob. I then added a new actor from frame 2 to frame 2 called sphere002.iob. I then added a new actor from frame 3 to frame 3 called sphere003.iob. I then added a new actor from frame 4 to frame 4 called sphere004.iob. ..... I then added a new actor from frame 40 to frame 40 called sphere040.iob. I then added a new actor from frame 41 to frame 41 called sphere041.iob. .... and so on. My anim was such that my repetitive motion made a pretty clean transition from beginning to end [in DPaint] so repeating it looked all right. If not, ping-ponging would have worked [instead of 1 2 3 4 1 2 3 4 1 ... it goes 1 2 3 4 4 3 2 1 1 2 ...] Also, I made sure the best views (by the camera) didn't have a transition, anyway. Entering the 80 objects again is boring, but the file requestor is fast enough (and has last file defaults!) so it only took 10 minutes. Alternatively, it might have been neat to see what morphs would do- this would fade out one frame while bringing in the next (I think) and might be worth trying sometime. This would be done by changing the object every other frame (or even less often) and setting the # of transition frames to 1 or more. Well, thats it! The ray-traced anim is rendering now- the scanline version showed me waving around just fine, and it really looked smooth! I thought that people might like to try this technique- its roundabout, but the results are worth it! A note- Animation Journeyman (another renderer) supports animbrushes... must be nice, though I haven't seen it. If anyone wants me to clarify anything I'll be happy to. This little essay has grown a bit in length... :-) I won't be able to post the final anim, its HUGE!, as is the project itself (40 pictures, > 40 objects..) though I might put a still or two on ab20 if people want me to. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ iii) 3-D FONT, by Steve Worley: I was mucking around trying to make a new "Imagine" picture for the startup sequence, and thought it might be neat to ray-trace a nice version. The question is what is the best way to get nice 3D fonts? Well, you get a nice big font (I used my Pro-Page Helvetica-Bold at about 80 pixels high) and save the word(s) as a picture, then convert this to an outline in the Detail editor and extrude. You can auto-face using "slice", being careful to only slice 2 or 3 letters at once to keep an Imagine bug at bay. [It will hang if you have too many letters. It's not the number of points- perhaps too many pieces. Anyway, a bug. This gives you a nice 3D font. Well, not really. It gives you a 3D font, but to be honest, its kinda boring. Its just flat letters with depth. Ugh. Wouldn't some neat color or chiseled edges or something help? "Yes!" I said to myself. Beveled edges all the way around would look way-cool! OK, lessee, I can put a smaller copy of each letter on top of itself, um, no, I could drag the points on the outline in, um, no, argh!!! It is VERY difficult! I couldn't come up with a good way to do it. Remember, you don't want a letter becoming smaller as it reaches the surface of the letter, you want it to become THINNER. A smaller copy on top would make a cone-like effect. Not what I'm looking for. Finally, I came up with a method that worked really well. First, go into DPaint and pick up your word or whatever as a brush. Then use shift-O to THIN the brush. I thinned three times- you might do more with a bigger font, less with a smaller font. An font less than about 50 pixels high is gonna die. I then saved the picture with "IMAGINE" stamped on it twice- thick and thin. I loaded it into Imagine and converted to an outline. Now, I wanted to make a surface that went from the big outline to the thinner one. An ideal job for skin, right? Yes! Well, almost. Skin requires both objects to have the same number of points. (What would it do with the extras on one or the other?) The thinned letters were considerably more complex than their thick versions. [The curves were tighter, and right angles were rounded.] What I did was copy the thick font's outline, and superimposed it onto the thin version. Then I used "drag points" on each letter to make the big font look just like the thinned one. I also used my judgement in what looked good- the thinned font was a guide, not an absolute. When I was done, I deleted my original thin letters. I was left with "IMAGINE" in normal letters, and "IMAGINE" with thin letters. Both versions had the same number of points. The letters should have some depth, so I copied the thick version again, and extruded it into a tube. To make the chiseled faces, I placed the thin version directly on top of the un-extruded version, then raised it up a little bit in the direction towards me. Then I picked them both and skinned. Putting a front face on the letters was pretty easy. I just used the slice method shown in the tutorial manual. Messy, but it works. I used a HUGE triangle (primitive plane, one corner deleted) placed over the IMAG letters at a depth JUST under the thin letters, and sliced. I deleted the crufty leftovers (the outside triangle bits, the VERY small parts chopped from the skinned chisel section). I repeated for the INE letters. I then selected all of the faces and chisel parts, and JOINED them into one object. I was then left with an "tube" and a "cap". I placed the cap (the front face and chisel edge) directly over the tube and joined them both. I didn't bother with a back face, but you could face it if you like, or even copy the cap and scale it in its depth direction by -1 to get an inverted version that will fit on the back. Thats it! I used "merge" at the end to connect everything together. Be careful to turn Phong _OFF_. You WANT a faceted appearance. I haven't completed the picture, and I should really work on my water waves. Or my thesis. Sigh. Anyway, the final letters looked VERY slick. Try it! Another idea would be using the letters to slice out a hollow in a solid object, to get a carved/stamped surface. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ APPENDIX H: Credits and email addresses +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Sandy Antunes (antunes@astro.psu.edu) Edward Chadez (echadex@carl.org) Colorado Alliance of Research Libraries Mark Davis (davis@soomee@rust.enet.dec.com) Matt Feifarek (mattf@picard.cs.wisc.edu) Duane Fields (n350bq@tamuts.tamu.edu) Kevin Goroway (pawn@wpi.wpi.edu) Mike Halvorsen Jim Lange (jlange@oracle.com) Oracle Corporation Harv Laser ({anywhere}!crash!hrlaser) Glenn Lewis (glewis%pcocd2.intel.com@Relay.CS.Net) Mark D. Manes (manes@vger.nsu.edu) Stephen Menzies (S.Menzies@CAM.ORG) Richard Nollman (rnollman@maxzilla.encore.com) Helge Egelund Rasmussen (her@compel.dk) Marc Rifkin (r38@psuvm.psu.edu) Dave Schreiber (davids@slugmail.ucsc.edu) Udo Schuermann (walrus@wam.umd.edu) Sean Schur (schur@isi.edu) California Institute for the Arts Bill Squier (u93_wsquier@vaxa.stevens-tech.edu) Colin Stobbe (umstobb1@ccu.umanitoba.ca) Scott Sutherland Mark Thompson (mark@westford.ccur.com) Radiant Image Productions Juan Trevino (tucker@mammoth.cs.unr.edu) Steven Webb (webbs@handel.cs.colostate.edu) Robert Wallace Don Whitaker (dcwhitak@nyx.cs.du.edu) Steve Worley (spworley@athena.mit.edu) (denbeste@ursa-major.spdcc.com) ============================= END OF FILE ===============================